我在recyclerview中有一個開關,在從DB中檢索數據後,數據顯示在recyclerview中。當回收站打開時,我讀取DB,如果DB中的某個字段爲「Y」,則啓用該開關或禁用該開關。 現在的問題是隨之而來的onCheckedchanged偵聽器也被稱爲,我只想在用戶手動設置開關時調用onCheckedChanged。onCheckedChanged自動調用
在打開recyclerview以下被執行:
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);
...................................
...................................
當recyclerView剛剛打開被稱爲OncheckedChanged方法:
@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"/>
浪費了很多天試圖找出爲什麼onCheckedChanged被自動調用並拋出我的單選按鈕狀態,這意味着我的應用程序無用。感謝您指出一個簡單而有效的解決方案。最後,我可以轉向生活中的其他重要事情。 – zeeshan
這絕對有效。但是,如果用戶滑動交換機,是否會發生任何事件?在這種情況下,如果使用的是滑動開關,這是行不通的。 – dhun
豎起大拇指。這是我們在幾乎所有應用程序的設置部分遇到的一個非常常見的問題。而這個解決方案是最好也是最簡單的 –