如何在列表视图中正确管理视图

问题描述:

我想知道如何管理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); 

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

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

我认为你可以通过使用支持列表中的多个视图类型的ListView来获得你想要的结果。

在适配器的时候会实施类似

@Override 
    public int getItemViewType(int position) { 
     int type = 0; 
     if (position == mySelectedPosition) { 
      type = 1; 
     } 
     return type; 
    } 

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

其他方法那么你的getView方法将被交到正确类型项目的位置的示意图。也就是说,选定的项目总是会被赋予一个“大”的视图来重用。

不建议出于性能和内存方面的原因每次都创建一个新的View。

+0

好的,这似乎是一个解决方案,但:如果可以有任何配置每个列表项目。我是否必须自己跟踪所有这些信息? – Jonas 2011-03-16 19:32:45