Android取消选中“回收站”项上的所有复选框,请取消选中

时间:2018-09-29 03:00:11

标签: android checkbox android-recyclerview custom-adapter

我有带有Checkbox组件的回收者视图项目,并实现了常用的“全部检查”按钮。当我“取消选中”列表项中的按钮时,我想“取消选中”回收者视图外部的通用“全选”复选框。

访问适配器中的通用“全选”复选框时遇到问题。

在我的适配器类中添加以下代码,

userViewHolder.itemCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                userViewHolder.commonCheckbox.setChecked(false);
            }
        }
    });

在onBindViewHolder中,我实现了以下检查的侦听器,

static int transcode(void)
    {
    XLOGD("==========transcode==========");
   ...
    XLOGD("start transcode");
    while (!received_sigterm) {
        int64_t cur_time= av_gettime_relative();

        /* if 'q' pressed, exits */
        if (stdin_interaction)
            if (check_keyboard_interaction(cur_time) < 0)
                break;

        /* check if there's any stream where output is still needed */
        if (!need_output()) {
            av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write 
            to, finishing.\n");
            break;
        }

        ret = transcode_step();
        if (ret < 0 && ret != AVERROR_EOF) {
            av_log(NULL, AV_LOG_ERROR, "Error while filtering: %s\n", 
            av_err2str(ret));
            break;
        }

        /* dump report by using the output first video and audio streams */
        print_report(0, timer_start, cur_time);
    }

    return ret;
   }

但是,commonCheckbox显示空指针异常。预先感谢。

2 个答案:

答案 0 :(得分:0)

视图持有者将保留回收的视图项的布局,是的,因此ID不会显示为“不正确”,因为您有一个具有该名称的ID,但是该视图正在其中查找ID与普通复选框所在的视图不同,这就是为什么它返回null的原因。

我相信最简单的解决方案是在调用onCheckChanged侦听器时将Listener传递给Viewholder并从侦听器调用方法以取消选中普通复选框。

答案 1 :(得分:0)

最后,我使用接口方法实现了。 下面的适配器类代码,

//Interface class
public interface OnDataChangeListener{
    public void onDataChanged(int size);
}
//Listener discussion
OnDataChangeListener mOnDataChangeListener;
public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener){
    mOnDataChangeListener = onDataChangeListener;
}
//Set listener
userViewHolder.itemCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                mOnDataChangeListener.onDataChanged(homeworkdate.size());
            }
        }
    });

在下面的活动分类代码中,

classAdapter.setOnDataChangeListener(new classAdapter.OnDataChangeListener() {
                        @Override
                        public void onDataChanged(int size) {
                            commonCheckbox.setChecked(false);
                        }
                    });