我想知道如何管理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);
现在的问题是当项目从列表中消失并重新出现(滚动列表)时,视图是全新的,高度设置为“小”。
我的问题是:如何管理项目视图以保留其属性,而不会弄乱其他视图和视图回收?
答案 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方法将被传递给项目位置的正确类型的视图。即,所选项目将始终被给予“大”视图以重复使用。
出于性能和内存原因,不建议每次都创建一个新视图。