首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Android复选框Clickable无效

Xamarin Android复选框Clickable无效
EN

Stack Overflow用户
提问于 2019-01-21 08:00:23
回答 2查看 471关注 0票数 0

我目前正在Visual中使用Mvvm.cross框架和Xamarin进行一个项目。这是我的问题。

我有两个自定义复选框:

checkbox_approve:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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 文件中的代码:

代码语言:javascript
复制
                  <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>

我想要的是:如果用户单击1复选框,第二个复选框将是不可点击的。以下是ReportResponseView.cs: 中的代码

代码语言:javascript
复制
 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复选框时,第二个复选框仍然可以点击。我想知道我是不是做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-30 04:20:41

问题是我在2 AlphaRelativeLayout上有click event,它覆盖了2个复选框,总是允许用户单击AlphaRelativeLayout,然后使2个复选框明显可点击。

这里是解决方案:我在ViewModel中稍微调整了2种方法ApprovedCommandRejectedCommand,然后只需要将Click事件从AlphaRelativeLayout移到Checkbox属性

代码语言:javascript
复制
               <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>
票数 0
EN

Stack Overflow用户

发布于 2019-01-21 10:45:29

可以使用已启用的false属性来防止单击。

代码语言:javascript
复制
       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;
                }
            };
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54285577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档