Android ListView itemClick问题

时间:2011-05-12 03:31:18

标签: android listview click

有人可以向我解释这个问题吗?

我有一个列表视图,其中包含的行数多于屏幕可显示的行数,因此滚动。 如果我点击一个项目,我会替换属于每一行的图标。一切正常。

我遇到的问题是,当我点击时可以说第一项时,我会更改第一行的图标。当我现在向下滚动时,我看到可见视口外的第一行也改变了图标。

为什么会发生这种情况?如何避免此问题?

提前致谢, Mozzak

1 个答案:

答案 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;
}