我有带有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显示空指针异常。预先感谢。
答案 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);
}
});