Xamarin Android 复选框可点击不起作用
Xamarin Android Checkbox Clickable doesn't work
我目前正在使用 Mvvm.cross 框架和 Visual studio 中的 Xamarin 开发一个项目。这是我的问题。
我有 2 个自定义复选框:
checkbox_approve:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/approved" />
<item android:state_checked="false"
android:drawable="@drawable/circle_unchecked" />
</selector>
checkbox_reject:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/rejected" />
<item android:state_checked="false"
android:drawable="@drawable/circle_unchecked" />
</selector>
这是 ReportResponseView.axml
文件中的代码:
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Click ApprovedCommand"> *//this is binding to ViewModel for different purposes*
<CheckBox
android:id="@+id/approvedCheckBox"
android:button="@drawable/checkbox_approve"
android:clickable="false"
local:MvxBind="Checked IsApproved" /> *//this is binding to ViewModel for different purposes*
</dc.AlphaRelativeLayout>
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Click RejectedCommand">
<CheckBox
android:id="@+id/rejectedCheckBox"
android:button="@drawable/checkbox_reject"
android:clickable="false"
local:MvxBind="Checked IsRejected" />
</dc.AlphaRelativeLayout>
我想要的是:如果用户点击第一个复选框,第二个复选框将无法点击。这是 ReportResponseView.cs:
中的代码
protected override void InitView(View view)
{
approveCheckBox = (CheckBox)view.FindViewById(Resource.Id.approvedCheckBox);
rejectCheckBox = (CheckBox)view.FindViewById(Resource.Id.rejectedCheckBox);
approveCheckBox.CheckedChange += (s, e) =>
{
if (approveCheckBox.Checked)
{
rejectCheckBox.Clickable = false;
}
else
{
rejectCheckBox.Clickable = true;
}
};
rejectCheckBox.CheckedChange += (s, e) =>
{
if (rejectCheckBox.Checked)
{
approveCheckBox.Clickable = false;
}
else
{
approveCheckBox.Clickable = true;
}
};
}
approveCheckBox.Clickable
不适用于两个复选框。当我点击 1 个复选框时,第二个仍然可以点击。
请问我是不是做错了?
您可以使用 enabled false 属性 来防止点击
protected override void InitView(View view)
{
approveCheckBox =
(CheckBox)view.FindViewById(Resource.Id.approvedCheckBox);
rejectCheckBox =
(CheckBox)view.FindViewById(Resource.Id.rejectedCheckBox);
approveCheckBox.CheckedChange += (s, e) =>
{
if (approveCheckBox.Checked)
{
rejectCheckBox.Enabled = false;
}
else
{
rejectCheckBox.Enabled = true;
}
};
rejectCheckBox.CheckedChange += (s, e) =>
{
if (rejectCheckBox.Checked)
{
approveCheckBox.Enabled = false;
}
else
{
approveCheckBox.Enabled = true;
}
};
}
问题 是我在 2 AlphaRelativeLayout
上有 click event
,其中覆盖 2 个复选框总是允许用户点击 AlphaRelativeLayout
,然后使2 个复选框显然可以点击
解决方案:我在 ViewModel 中稍微调整了 2 个方法 ApprovedCommand
和 RejectedCommand
然后我只需要将点击事件从 AlphaRelativeLayout
到 Checkbox
属性
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/approvedCheckBox"
android:button="@drawable/checkbox_approve"
android:clickable="false"
local:MvxBind="Click ApprovedCommand" />
</dc.AlphaRelativeLayout>
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/rejectedCheckBox"
android:button="@drawable/checkbox_reject"
android:clickable="false"
local:MvxBind="Click RejectedCommand" />
</dc.AlphaRelativeLayout>
我目前正在使用 Mvvm.cross 框架和 Visual studio 中的 Xamarin 开发一个项目。这是我的问题。
我有 2 个自定义复选框:
checkbox_approve:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/approved" />
<item android:state_checked="false"
android:drawable="@drawable/circle_unchecked" />
</selector>
checkbox_reject:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/rejected" />
<item android:state_checked="false"
android:drawable="@drawable/circle_unchecked" />
</selector>
这是 ReportResponseView.axml
文件中的代码:
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Click ApprovedCommand"> *//this is binding to ViewModel for different purposes*
<CheckBox
android:id="@+id/approvedCheckBox"
android:button="@drawable/checkbox_approve"
android:clickable="false"
local:MvxBind="Checked IsApproved" /> *//this is binding to ViewModel for different purposes*
</dc.AlphaRelativeLayout>
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Click RejectedCommand">
<CheckBox
android:id="@+id/rejectedCheckBox"
android:button="@drawable/checkbox_reject"
android:clickable="false"
local:MvxBind="Checked IsRejected" />
</dc.AlphaRelativeLayout>
我想要的是:如果用户点击第一个复选框,第二个复选框将无法点击。这是 ReportResponseView.cs:
protected override void InitView(View view)
{
approveCheckBox = (CheckBox)view.FindViewById(Resource.Id.approvedCheckBox);
rejectCheckBox = (CheckBox)view.FindViewById(Resource.Id.rejectedCheckBox);
approveCheckBox.CheckedChange += (s, e) =>
{
if (approveCheckBox.Checked)
{
rejectCheckBox.Clickable = false;
}
else
{
rejectCheckBox.Clickable = true;
}
};
rejectCheckBox.CheckedChange += (s, e) =>
{
if (rejectCheckBox.Checked)
{
approveCheckBox.Clickable = false;
}
else
{
approveCheckBox.Clickable = true;
}
};
}
approveCheckBox.Clickable
不适用于两个复选框。当我点击 1 个复选框时,第二个仍然可以点击。
请问我是不是做错了?
您可以使用 enabled false 属性 来防止点击
protected override void InitView(View view)
{
approveCheckBox =
(CheckBox)view.FindViewById(Resource.Id.approvedCheckBox);
rejectCheckBox =
(CheckBox)view.FindViewById(Resource.Id.rejectedCheckBox);
approveCheckBox.CheckedChange += (s, e) =>
{
if (approveCheckBox.Checked)
{
rejectCheckBox.Enabled = false;
}
else
{
rejectCheckBox.Enabled = true;
}
};
rejectCheckBox.CheckedChange += (s, e) =>
{
if (rejectCheckBox.Checked)
{
approveCheckBox.Enabled = false;
}
else
{
approveCheckBox.Enabled = true;
}
};
}
问题 是我在 2 AlphaRelativeLayout
上有 click event
,其中覆盖 2 个复选框总是允许用户点击 AlphaRelativeLayout
,然后使2 个复选框显然可以点击
解决方案:我在 ViewModel 中稍微调整了 2 个方法 ApprovedCommand
和 RejectedCommand
然后我只需要将点击事件从 AlphaRelativeLayout
到 Checkbox
属性
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/approvedCheckBox"
android:button="@drawable/checkbox_approve"
android:clickable="false"
local:MvxBind="Click ApprovedCommand" />
</dc.AlphaRelativeLayout>
<dc.AlphaRelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/rejectedCheckBox"
android:button="@drawable/checkbox_reject"
android:clickable="false"
local:MvxBind="Click RejectedCommand" />
</dc.AlphaRelativeLayout>