【发布时间】:2015-02-25 04:12:54
【问题描述】:
例如(Xamarin c# 示例,但 Android java 的概念也相同): “数据”是保存数据的类
public override View getView (int position, View convertView, ViewGroup parent){
if( convertView == null ){
convertView = inflater.inflate(Resource.layout.my_list_item, parent, false);
}
//just for example , hence avoiding ViewHolder here
var textView = convertView.FindViewById<TextView>(Resource.Id.textView2);
var imageView = convertView.FindViewById<ImageView>(Resource.Id.feedImageView);
text.Text = data.getText(position);
imageView = GetImageAsynch(data.getURL(position));
return convertView;
}
这里对于列表中的每一行,都添加/刷新了 textView 和 imageView,这最初很好,但是当用户滚动和程序开始使用回收的视图时,为什么我们需要重新分配值(文本和图像)再次如果它已经存在于回收视图中,那将是一个过度的权利?如果我这样做怎么办:
public override View getView (int position, View convertView, ViewGroup parent){
if( convertView == null ){
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//just for example , hence avoiding ViewHolder here
var textView = convertView.FindViewById<TextView>(Resource.Id.textView2);
var imageView = convertView.FindViewById<ImageView>(Resource.Id.feedImageView);
//this means if (recycled) view is empty, then only update the view
if(text.Text == "")
{
text.Text = data.getText(position);
imageView = GetImageAsynch(data.getURL(position));
}
return convertView;
}
这对我来说很好用,但我担心的是我在这里或互联网上看到的许多示例中都没有看到任何这样的模式。
谢谢
更新:添加了“数据”类以更清楚地了解问题
【问题讨论】:
-
在您的示例中,所有视图都是相同的,并且根据某些文本字段处于“活动”或“非活动”状态。所以是的,在你的例子中,几乎不需要回收视图。当然,如果您的用户的互联网连接速度非常慢,那么如果图像不在设备本地,则更新图像将需要很长时间,而如果您回收视图,则图像可以立即更新。
标签: c# android android-listview xamarin