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