我有一个开关在回收视图和数据显示在回收视图后,检索数据从DB。当回收视图打开时,我读取DB,如果DB中的字段为"Y“,则启用开关,否则禁用开关。现在问题是,onCheckedchanged侦听器也会被调用,我希望只有当用户手动设置开关时才调用onCheckedChanged。
在打开回收视图时,将执行以下操作:
holder.enabledisable.setChecked(messengerRecord.get_is_valid().equalsIgnoreCase("Y"));ViewHolder类:
public class viewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener{
public SwitchCompat enabledisable;
public viewHolder(View v) {
enabledisable = (SwitchCompat) v.findViewById(R.id.enabledisable);
enabledisable.setOnCheckedChangeListener(this);
...................................
...................................OncheckedChanged方法,在刚刚打开recyclerView时调用:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.v("ranjith","called oncheckedchanged");
MessengerRecord rec;
rec = dbHelper.getRecord(descview.getText().toString());
switch (buttonView.getId()) {
case R.id.enabledisable:
if (isChecked) {
rec.set_is_valid("Y");
dbHelper.updateRecord(rec);
}
}在布局文件中:
<android.support.v7.widget.SwitchCompat
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:id="@+id/enabledisable"
android:layout_alignRight="@+id/textview_to"
android:layout_alignEnd="@+id/textview_to"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>发布于 2015-01-29 16:13:51
奇怪的是,我们所有的人都有这个问题,但不是官方的谷歌对这个简单的问题的答案。
最简单的方法是检查:
buttonView.isPressed()如果为true,则意味着用户单击了视图。
不需要全局变量。
发布于 2018-06-28 13:40:18
尝尝这个
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isPressed()) {
... //returns true, if user clicks the switch button
}}发布于 2016-05-30 23:27:44
最后,我使用了SwitchCompat的这个子类来避免这个问题。这样,我就不需要模板代码来使用这个类了。每当您需要在不触发侦听器的情况下更改检查时,请使用setCheckedSilent而不是setChecked
import android.content.Context;
import android.os.Parcelable;
import android.support.v7.widget.SwitchCompat;
import android.util.AttributeSet;
/**
* Created by emanuel on 30/5/16.
*/
public class Switch extends SwitchCompat {
private OnCheckedChangeListener listener;
public Switch(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
this.listener = listener;
super.setOnCheckedChangeListener(listener);
}
@Override
public void onRestoreInstanceState(Parcelable state) {
super.setOnCheckedChangeListener(null);
super.onRestoreInstanceState(state);
super.setOnCheckedChangeListener(listener);
}
public void setCheckedSilent(boolean checked) {
super.setOnCheckedChangeListener(null);
super.setChecked(checked);
super.setOnCheckedChangeListener(listener);
}
}onRestoreInstanceState也触发了侦听,当在onViewCreated方法中设置时,您将返回到前面的片段。希望它对你有用!
https://stackoverflow.com/questions/27641705
复制相似问题