Android 复选框 setOnCheckedChangeListener 不起作用
Android Checkbox setOnCheckedChangeListener does not work
这应该是非常简单的事情,但由于某种原因,复选框的侦听器不起作用。
这是我的布局:
<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 和小型摩托罗拉棉花糖上进行测试。
有时我什至尝试了 setOnClickListener() 方法:
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LOGD(TAG, "IsButton checked ? "+ ((CheckBox)
v).isChecked());
}
});
结果是一样的,我在 logcat
中没有看到任何东西
有人知道为什么 Checkbox 的侦听器无法正常工作吗?
很可能 setOnCheckedChangeListener()
没有被调用 :)
没有理由不工作。
在您的 xml 中,您必须根据您的要求至少定义检查类型。
android:checked="false"
在 java 文件中你必须使用 setOnCheckedChangeListener()
.
希望它对所有人有用。
如果您使用 DataBinding
,请设置属性 android:checked="@={viewModel.someState}"
,然后通过 ViewBinding
调用此侦听器,如
binding.checkBox.setOnCheckedChangeListener { _, _ ->
//
}
setOnCheckedChangeListener
不会被调用。
您可以设置app:checkListener
并使用BindingAdapter
:
@BindingAdapter("app:checkListener")
fun CheckBox.setCheckedChangeListener(listener: CompoundButton.OnCheckedChangeListener) {
setOnCheckedChangeListener(listener)
}
或观察someState
的变化:
viewModel.someState.observe(viewLifecycleOwner) {
viewModel.changeCheckBox()
// Other actions.
}
这应该是非常简单的事情,但由于某种原因,复选框的侦听器不起作用。
这是我的布局:
<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 和小型摩托罗拉棉花糖上进行测试。
有时我什至尝试了 setOnClickListener() 方法:
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LOGD(TAG, "IsButton checked ? "+ ((CheckBox)
v).isChecked());
}
});
结果是一样的,我在 logcat
中没有看到任何东西有人知道为什么 Checkbox 的侦听器无法正常工作吗?
很可能 setOnCheckedChangeListener()
没有被调用 :)
没有理由不工作。
在您的 xml 中,您必须根据您的要求至少定义检查类型。
android:checked="false"
在 java 文件中你必须使用
setOnCheckedChangeListener()
.
希望它对所有人有用。
如果您使用 DataBinding
,请设置属性 android:checked="@={viewModel.someState}"
,然后通过 ViewBinding
调用此侦听器,如
binding.checkBox.setOnCheckedChangeListener { _, _ ->
//
}
setOnCheckedChangeListener
不会被调用。
您可以设置
app:checkListener
并使用BindingAdapter
:@BindingAdapter("app:checkListener") fun CheckBox.setCheckedChangeListener(listener: CompoundButton.OnCheckedChangeListener) { setOnCheckedChangeListener(listener) }
或观察
someState
的变化:viewModel.someState.observe(viewLifecycleOwner) { viewModel.changeCheckBox() // Other actions. }