如何在列表视图中正确管理视图
问题描述:
我想知道如何管理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。
好的,这似乎是一个解决方案,但:如果可以有任何配置每个列表项目。我是否必须自己跟踪所有这些信息? – Jonas 2011-03-16 19:32:45