如何正确管理Listview中的视图

时间:2011-03-15 21:48:48

标签: android listview view

我想知道如何管理ListView中的视图。

我有一个在ListView上设置的自定义适配器,此适配器会覆盖getView方法

public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            v = mInflater_.inflate(R.layout.news_newsentry, null);
        }

        final NewsItem newsItem = getItem(position);

        if (newsItem != null) {
            // Do stuff
        }

        return v;

    }

但问题是,当用户点击某个项目时,我会略微更改视图以使其更大。效果很好,但是当项目视图被回收时,它会保持“大”高度以显示另一个项目。

为了防止这种情况,我每次都更改代码以创建一个新的视图

变化:

    View v = convertView;
    if (v == null) {
        v = mInflater_.inflate(R.layout.news_newsentry, null);
    }

通过

    View v = mInflater_.inflate(R.layout.news_newsentry, null);

现在的问题是当项目从列表中消失并重新出现(滚动列表)时,视图是全新的,高度设置为“小”。

我的问题是:如何管理项目视图以保留其属性,而不会弄乱其他视图和视图回收?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过使用ListView内置支持列表中的多个视图类型来获得所需的结果。

在适配器中,您将实现类似于

的其他方法
    @Override
    public int getItemViewType(int position) {
        int type = 0;
        if (position == mySelectedPosition) {
            type = 1;
        }
        return type;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

然后,您的getView方法将被传递给项目位置的正确类型的视图。即,所选项目将始终被给予“大”视图以重复使用。

出于性能和内存原因,不建议每次都创建一个新视图。