有人可以向我解释这个问题吗?
我有一个列表视图,其中包含的行数多于屏幕可显示的行数,因此滚动。 如果我点击一个项目,我会替换属于每一行的图标。一切正常。
我遇到的问题是,当我点击时可以说第一项时,我会更改第一行的图标。当我现在向下滚动时,我看到可见视口外的第一行也改变了图标。
为什么会发生这种情况?如何避免此问题?
提前致谢, Mozzak
答案 0 :(得分:2)
为了确保,你正在使用一个实现ListAdapter的类或者扩展其他类型的适配器吗?
使用适配器时,您必须记住ListView中的视图已被回收以节省内存。因此,您需要将状态存储在单独的变量中。
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
{
LayoutInflater inflator = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflator.inflate(R.layout.listitem, null);
}
// Retreive my image that may or may not change
ImageView myIcon = (ImageView) convertView.findViewById(R.id.iconView);
// Checking my stored boolean for this position to see if I need to use icon2 or icon
if (myItem[position].needsIconChanged)
{
// I have set my boolean, so use icon2
myIcon.setImageResource(R.drawable.icon2);
}
else
{
// I have not set my boolean, or set it to false so set it to icon
myIcon.setImageResource(R.drawable.icon);
}
return convertView;
}
您还必须记住在onItemCLick
中设置该布尔值public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long arg3) {
// Retreive your item and set a boolean or icon state (depending on what you do)
myAdapter.getItemAtPosition(position).needsIconChanged = true;
}