【发布时间】:2016-06-11 11:47:03
【问题描述】:
我有一个自定义的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。请分享建设性的 cmets
-
您有条件地调用
setImageResource:您必须在else子句中“清除”它,还要摆脱那个持有者的东西:它只会弄乱代码,它的好处几乎等于零 -
@pskink 请查看我的编辑
标签: android listview checkbox android-imageview