Android 在recyclerview中,在何处放置复选框的onclick侦听器

Android 在recyclerview中,在何处放置复选框的onclick侦听器,android,Android,我已经做到了这一点: 我在我的“numbers”对象类中创建了一个布尔变量,其中包含getter和setter。在适配器底部附近的bindNumbers方法中,我设置了复选框的选中状态。我知道我现在应该使用点击式监听器,但我不知道如何做到这一点。有人能给我一个初学者友好的解释现在该做什么吗?论坛上的所有其他答案都更加先进,对我没有帮助 public class myAdapter extends RecyclerView.Adapter<myAdapter.ViewHolder> {

我已经做到了这一点:

我在我的“numbers”对象类中创建了一个布尔变量,其中包含getter和setter。在适配器底部附近的bindNumbers方法中,我设置了复选框的选中状态。我知道我现在应该使用点击式监听器,但我不知道如何做到这一点。有人能给我一个初学者友好的解释现在该做什么吗?论坛上的所有其他答案都更加先进,对我没有帮助

public class myAdapter extends RecyclerView.Adapter<myAdapter.ViewHolder> {

private List<numbers> mNumbers = Collections.emptyList();

public myAdapter (List<numbers> numbers) {
    mNumbers = numbers;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v  = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_slot, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}


@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.bindNumbers(mNumbers.get(position));
}

@Override
public int getItemCount() {
    return mNumbers.size();
}


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView numberText;
    EditText checklistText;
    Button deleteButton;
    CheckBox checkDisBox;

    public ViewHolder(View itemView) {
        super(itemView);
        numberText = (TextView) itemView.findViewById(R.id.number);
        checklistText = (EditText) itemView.findViewById(R.id.editText);
        deleteButton = (Button) itemView.findViewById(R.id.deleteButton);
        checkDisBox = (CheckBox) itemView.findViewById(R.id.checkBox);

        deleteButton.setOnClickListener(this);
    }

    public void bindNumbers(numbers numbers) {
        numberText.setText(numbers.getInt() + "");
        checkDisBox.setChecked(numbers.isChecked());
    }

    @Override
    public void onClick(View v) {
        mNumbers.remove(getAdapterPosition());
        notifyItemRemoved(getAdapterPosition());
    }
}
}
公共类myAdapter扩展了RecyclerView.Adapter{ 私有列表mNumbers=Collections.emptyList(); 公共myAdapter(列表编号){ mNumbers=数字; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.list_slot,parent,false); 视窗支架vh=新视窗支架(v); 返回vh; } @凌驾 公共无效onBindViewHolder(ViewHolder,最终int位置){ 持有者编号(mNumbers.get(position)); } @凌驾 public int getItemCount(){ 返回mNumbers.size(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 文本视图编号文本; 编辑文本检查列表文本; 按钮删除按钮; 复选框checkDisBox; 公共视图持有者(视图项视图){ 超级(项目视图); numberText=(TextView)itemView.findViewById(R.id.number); checklistText=(EditText)itemView.findViewById(R.id.EditText); deleteButton=(Button)itemView.findViewById(R.id.deleteButton); checkDisBox=(复选框)itemView.findViewById(R.id.CheckBox); deleteButton.setOnClickListener(此); } 公共编号(编号){ numberText.setText(numbers.getInt()+); checkDisBox.setChecked(number.isChecked()); } @凌驾 公共void onClick(视图v){ mNumbers.remove(getAdapterPosition()); notifyItemRemoved(getAdapterPosition()); } } }
我通常在
onBindViewHolder()
方法中添加侦听器,即

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.bindNumbers(mNumbers.get(position));
    holder.checkDisBox.setOnClickListener(new OnClickListener({
        ...
    }));
}
编辑:

实现的简短帮助:在适配器中,添加:

public class myAdapter extends RecyclerView.Adapter<myAdapter.ViewHolder> {

private List<numbers> mNumbers = Collections.emptyList();
private SparseBooleanArray mCheckedItems;

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.bindNumbers(mNumbers.get(position));
    boolean checked = mCheckedItems.get(position), false;
    holder.checkDisBox.setChecked(checked);
    holder.checkDisBox.setOnClickListener(new OnClickListener({
        mCheckedItems.put(position, !checked);
    }));
}
公共类myAdapter扩展了RecyclerView.Adapter{ 私有列表mNumbers=Collections.emptyList(); 专用SparseBooleanArray mCheckedItems; @凌驾 公共无效onBindViewHolder(ViewHolder,最终int位置){ 持有者编号(mNumbers.get(position)); 选中布尔值=mCheckedItems.get(位置),false; holder.checkDisBox.setChecked(已选中); holder.checkDisBox.setOnClickListener(新的OnClickListener({ mCheckedItems.put(位置,!已选中); })); }
我应该在click listener中输入什么代码?由于viewholder模式,我的复选框都很奇怪,我不知道,这取决于单击复选框时你想做什么当我单击复选框时,我只希望它被选中。当我再次单击它时,我希望它被取消选中。所以本质上我不希望发生任何事情除了默认设置。但问题是我们在循环视图中重复使用视图,所以当我选中一个框并向下滚动时,会选中一个随机框,因为视图正在重复使用。我正在寻找解决方案来解决这个问题。论坛上的其他答案没有太多帮助,因为我不需要任何高级的东西,只需要一些初学者的东西参数保存选中的信息,即SparseBooleanArray,如果选中了当前项,则在
onBindViewHolder()
方法中进行检查,并根据结果调用
holder.checkDisBox.setChecked()
,并将该项添加到
onClick()中的参数中
你能给我举个例子吗?我不知道怎么做你写的