我的自定义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
会随机显示图片,而不管其是否为真。
在滚动时,每4-5个列表项目/行项目变得不可检查(我的设备在屏幕上显示4-5个单元格/行/项目而不滚动),因为项目1不可检查。简单地说,它按照getView()机制进行检索。
我知道这是在滚动时保持列表项位置或ListView的回收问题。怎么做?
答案 0 :(得分:0)
您的条件如下:
#define MAX_RESOURCE_SIZE 65536 // There is no maximum size - you'll need to pick one
static char buffer[MAX_RESOURCE_SIZE];
...
if (myResourceSize>MAX_RESOURCE_SIZE) {
Error("Resource too big!");
} // if
memcpy(buffer, pMyBinaryData, myResourceSize);
表示如果模型的属性选择为if (mainDataList.get(position).isSelected())
holder.imageView.setImageResource(R.drawable.ic_launcher);
,则会将一些图像资源设置为图像视图。问题在于,无论何时滚动和true
产生isSelected()
,您都不会做任何事情。因为您正在重新使用这些视图,所以您获得了一些旧的视图,这些视图在某些时候已将false
设置为true。它当前可能是isSelected()
,但您没有为此指定任何条件。
我的建议是你用以下方式做某事:
false