我在listview的每一行都有Like按钮, 单击它们时,它们会将颜色更改为红色!
当我单击一行中的图像按钮时我向下滚动列表视图,除了单击图像按钮,另一个图像按钮也会改变颜色 为什么????
public override View GetView(int position,View convertView,ViewGroup parent)
{
var item = (Tips)this.GetItem(position);
View view = convertView;
if (view == null)
{
view = this.activity.LayoutInflater.Inflate(Resource.Layout.list_item_Tips, null);
}
var TextTitle = view.FindViewById<TextView>(Resource.Id.titletxt);
TextTitle.Text = item.TITLE;
var TextWriter = view.FindViewById<TextView>(Resource.Id.contenttxt);
TextContent.Text = item.CONTENT;;
view.FindViewById<ImageButton>(Resource.Id.Like).Click += (sender, e) =>
{
view.FindViewById<ImageButton>(Resource.Id.Like).SetImageResource(Resource.Drawable.ic_liked);
item.LIKE = true;
item.LIKE_COUNT++;
view.FindViewById<TextView>(Resource.Id.like_count).Text = item.LIKE_COUNT.ToString();
}
};
return view;
}
链接错误图片:
答案 0 :(得分:1)
出现此问题是因为View行未正确回收,因此引用了错误的视图行。使用viewholder类声明所有控件并将此类的实例标记到每一行。
对于Ex:
public override View GetView (int position, View convertView, ViewGroup parent)
{
View rowView = convertView;
//reuse view
if (rowView == null) {
rowView = _context.LayoutInflater.Inflate (Resource.Layout.ItemCustomLayout, parent, false);
viewHolder = new ViewHolderItem ();
viewHolder.txtTemName = rowView.FindViewById<TextView>(Resource.Id.lblItemName);
rowView.Tag = viewHolder; //attaching viewholder reference to row
}
else
{
viewHolder = (ViewHolderItem)rowView.Tag; //during row re-use get the instance of the view holder
}
viewHolder.txtTemName.Text = strX;
return rowView;
}
//查看持有人类
class ViewHolderItem :Java.Lang.Object
{
internal TextView txtTemName;
}
在此处查找更多详情:http://appliedcodelog.blogspot.in/2015/07/working-on-issues-with-listview-in.html#ViewHolderTag
答案 1 :(得分:0)
您提到的现象是因为listview项目被回收,以确保正确的行为,在获取视图对象后检查item.LIKE是否为true,如果为true,则更改颜色,否则显示正常颜色
public override View GetView(int position,View convertView,ViewGroup parent)
{
var item = (Tips)this.GetItem(position);
View view = convertView;
if (view == null)
{
view = this.activity.LayoutInflater.Inflate(Resource.Layout.list_item_Tips, null);
}
var TextTitle = view.FindViewById<TextView>(Resource.Id.titletxt);
TextTitle.Text = item.TITLE;
var TextWriter = view.FindViewById<TextView>(Resource.Id.contenttxt);
TextContent.Text = item.CONTENT;;
if(item.LIKE)
{
view.FindViewById<ImageButton>(Resource.Id.Like).SetImageResource(Resource.Drawable.ic_liked);
}
else
{
view.FindViewById<ImageButton>(Resource.Id.Like).SetImageResource(Resource.Drawable.ic_normal);
}
view.FindViewById<ImageButton>(Resource.Id.Like).Click += (sender, e) =>
{
view.FindViewById<ImageButton>(Resource.Id.Like).SetImageResource(Resource.Drawable.ic_liked);
item.LIKE = true;
item.LIKE_COUNT++;
view.FindViewById<TextView>(Resource.Id.like_count).Text = item.LIKE_COUNT.ToString();
NotifyDataSetChanged();
}
};
return view;
}
代码可能不正确,我不熟悉Xamarin语法