我正在尝试制作一个带有复选框的 ListView ,我已经尝试了一个代码并且它工作正常但是我在尝试处理复选框状态时遇到了问题。问题出现在这行代码
holder.chkBox.setOnCheckedChangeListener((MyActivity) 上下文);
因为我试过的代码是使用与 MainActivity.java 文件分开的 Adapter.java 文件,但在我的代码中所有都在一个文件中所以我不知道如何在我的代码中使用这一行,我试过这个
holder.chkBox.setOnCheckedChangeListener((this) context);
也是一个错误的说法
使用这行 holder 的原因是当我选中一个复选框并向下滚动其他项目时,选中的复选框会自动取消选中,谁能告诉我如何解决这个问题?
这是我的适配器代码
@Override public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
View itemView = convertView;
if (itemView == null){
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.textView1 = (TextView) itemView.findViewById(R.id.textView1);
holder.check1 = (CheckBox) itemView.findViewById(R.id.check1);
holder.check2 = (CheckBox) itemView.findViewById(R.id.check2);
itemView.setTag(holder);
}
else{
holder = (ViewHolder) itemView.getTag();
}
holder.check1.setTag(position);
final Item item = items.get(position);
holder.textView1.setText(item.getName());
holder.check1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
if (position != ListView.INVALID_POSITION) {
Item p = items.get(position);
p.setSelected(isChecked);
}
}
}
}
);
holder.check2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
if (position != ListView.INVALID_POSITION) {
Item p = items.get(position);
p.setSelected(isChecked);
}
}
}
}
);
holder.check1.setChecked(item.isSelected());
holder.check2.setChecked(item.isSelected());
return itemView;
}
}private static class ViewHolder {
public TextView textView1;
public CheckBox check2,check1;
}}
最佳答案
首先,让您的 Activity 实现OnCheckedChangedListener
接口(interface),这会强制实现以下方法:
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
}
现在将您的 Activity 引用作为 OnCheckedChangeListener 类型的参数传递给您的适配器,并将其命名为监听器:
MyAdapter myadapter = new MyAdapter(context, MyActivity.this,listdata);
然后,在您的适配器类中,为您的复选框设置监听器,例如:
holder.chkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(buttonView.isPressed()){
//Write the logic to determine if the checkbox must be checked or not
}
}
}
);
这里的重点是使用复选框的isPressed()方法。
关于java - 使用 setOnCheckedChangeListener 的复选框持有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189703/