[CymChad/BaseRecyclerViewAdapterHelper]checkBox状态不正确

2024-08-20 2 views
6
recyclerView.addOnItemTouchListener(new OnItemClickListener() {
            @Override
            public void onSimpleItemClick(BaseQuickAdapter adapter, View view, int position) {
                CheckBox box = view.findViewById(R.id.checkbox);
                Volume volume = (Volume) adapter.getData().get(position);
//这里获取到的状态不正确。点击之后CheckBox是勾线状态,打印出来却是false。所以我不得不加了个!号
                if (!box.isChecked()) {
                    Log.d(TAG, "add: " + box.isChecked() + checked.size());
                } 
           });

不知道是不是用法有问题

回答

7

你需要主动改变volume变量的状态

7

@FrankKwok 不懂,我是想给recyclerview里面的CheckBox添加点击事件,所以用SimpleItemClick。按理说点击事件捕捉之后,判断box.isChecked是对的呀。我总不能点击一下就要改变一下volume吧。。

9

ckeckobx的状态怎么来的?

1
CheckBox box = view.findViewById(R.id.checkbox);
box.isCheck()

不是贴了吗

7

你并没有监听onCheckedListener嘛,在onTouch中肯定是获取不到的,view 只是通过自身重绘改变状态(仅ui表现上),但他并没有保存哦。这是我之前自定义checkview一点心得。

4

@HarkBen 谢谢 但是还是不知道怎么操作最好

9

你需要在Volume中设置一个参数用来记录checkbox状态,然后每次修改checkbox状态的时候去更新Volume这样才能解决由于复用导致列表混乱的问题。

5

@DanteAndroid 兄弟,问下你的全选做了么?

9

@BugMen

    public void selectAll(boolean select) {
        this.select = select;
        notifyDataSetChanged();
    }

...

in convert:
        checkBox.setChecked(select);
3

checkBoxAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { for (Mode mode : modeList) { mode .isCheck = true; } } else { for (Mode mode : modeList) { mode .isCheck = false; } } adapter.notifyDataSetChanged(); } }); 我是在activity层监听一个checkbox然后让所有item里的checkbox都选中,这样写哪里有问题啊? @DanteAndroid

0

@BugMen 看看你convert里面的代码。另外代码块请使用 ``` 符号开头,以 ``` 符号结尾。或者点工具栏上面双引号右边那个括号

3

helper.setOnCheckedChangeListener(R.id.checkbox_invoice, new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { item.isCheck = isChecked; } }); if (item.isCheck) { helper.setChecked(R.id.checkbox_invoice, true); } else { helper.setChecked(R.id.checkbox_invoice, false); } 这个是我对item里CheckBox做的操作 @DanteAndroid

6

不知道。你代码太乱了。如果是多行代码,``` 之后要换行的。 可以在convert里面加打印看看。