Android Checkbox setOnCheckedChangeListener不起作用

时间:2018-08-29 13:14:03

标签: android event-listener android-checkbox

这应该很简单,但是由于某些原因,复选框的侦听器无法正常工作。

这是我的布局:

                <RelativeLayout
                android:layout_width="match_parent"
                android:layout_marginRight="16dp"
                android:layout_marginLeft="16dp"
                android:layout_height="wrap_content">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="12sp"
                    android:layout_marginLeft="@dimen/dimen_5"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_centerVertical="true"
                    android:textStyle="bold"
                    android:text="@string/my_text"
                    />

                <CheckBox
                    android:id="@+id/check_status"
                    android:layout_width="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentEnd="true"
                    android:layout_height="wrap_content" />
            </RelativeLayout>

这是我的片段中的实现:

CheckBox checkBox = mView.findViewById(R.id.check_status);
            checkBox.setOnCheckedChangeListener(new 
CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean 
isChecked) {
                    LOGD(TAG, "IsButton checked ? "+ isChecked);
                    Toast.makeText(getActivity(), "Check", 
Toast.LENGTH_SHORT).show();
                }
            });

就像我说的那样,这应该很简单,但是听众.....嗯,它什么也听不到。我正在Nexus 5x Oreo和小型Motorola棉花糖上进行测试。

在某些时候,我什至尝试了setOnClickListener()方法:

checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    LOGD(TAG, "IsButton checked ? "+ ((CheckBox) 
v).isChecked());
                }
            });

结果是一样的,我在logcat中什么都没看到

有人知道为什么Checkbox的侦听器无法正常工作吗?

3 个答案:

答案 0 :(得分:1)

很可能没有调用setOnCheckedChangeListener():)

答案 1 :(得分:0)

几乎没有理由不工作。

  1. 在您的 xml 中,您必须根据您的要求至少定义检查类型。

    android:checked="false"

  2. 在 java 文件中,您必须使用 setOnCheckedChangeListener()

希望它对所有人有用。

答案 2 :(得分:0)

如果您使用 DataBinding,请设置属性 android:checked="@={viewModel.someState}",然后通过 ViewBinding 调用此侦听器,例如

binding.checkBox.setOnCheckedChangeListener { _, _ ->
    //
}

setOnCheckedChangeListener 不会被调用。

  1. 您可以设置 app:checkListener 并使用 BindingAdapter

    @BindingAdapter("app:checkListener")
    fun CheckBox.setCheckedChangeListener(listener: CompoundButton.OnCheckedChangeListener) {
        setOnCheckedChangeListener(listener)
    }
    
  2. 或者观察someState的变化:

    viewModel.someState.observe(viewLifecycleOwner) {
        viewModel.changeCheckBox()
        // Other actions.
    }