我有一个自定义ListView
包含TextView
,ImageView
, Checkbox
。在ListView
,没有什么应该检查/取消选中,因为我必须根据条件来阻止它。如何维护列表视图行/项目的位置?
任务我做:
如果
Checkbox
被选中,那么它应该显示的图像中ImageView
。我不想让
CheckBox
根据条件进行检查/启用。
下面是我的自定义适配器代码。
public class CustomAdapter extends BaseAdapter {
private Context context;
private ArrayList<POJO> mainDataList;
private LayoutInflater inflater = null;
public CustomAdapter(Context context, ArrayList<POJO> mainDataList) {
this.context = context;
this.mainDataList = mainDataList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mainDataList.size();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public POJO getItem(int position) {
// TODO Auto-generated method stub
return mainDataList.get(position);
}
public class Holder
{
private TextView name;
private ImageView imageView;
private CheckBox check;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
final Holder holder;
if (view == null) {
holder = new Holder();
view = inflater.inflate(R.layout.my_layout_file, null);
holder.name = (TextView) view.findViewById(R.id.textView_Name);
holder.imageView = (ImageView) view.findViewById(R.id.img);
holder.check = (CheckBox) view.findViewById(R.id.checkBox);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.check.setTag(position);
if (mainDataList.get(position).isEditable()) {
holder.check.setEnabled(false);
holder.check.setClickable(false);
} else {
holder.check.setEnabled(true);
holder.check.setClickable(true);
}
}
holder.name.setText(mainDataList.get(position).getName());
holder.check.setChecked(mainDataList.get(position).isSelected());
if (mainDataList.get(position).isSelected())
holder.imageView.setImageResource(R.drawable.ic_launcher);
else
holder.imageView.setImageResource(null);
return view;
}
}
我的问题是:
在滚动,
ImageView
显示图像随机不论TRUE状态。在滚动上,每4-5个列表项目/行项目无法检查后(我的设备在屏幕上显示4-5个单元格/行/项目而不滚动),因为项目1是不可检查的。简单地说,它根据getView()机制进行检索。
我知道这是在滚动时维护列表项目位置或ListView的回收问题。这个怎么做?
@sushildlh已经尝试过SparseBooleanArray。请分享建设性的意见 – VVB
你有条件地调用'setImageResource':你必须在'else'子句中“清除”它,并且摆脱那个持有者的东西:它只会混淆代码,它的好处几乎等于零 – pskink
@ pskink请参阅我的编辑 – VVB