我确实为我的Android应用程序(Xamarin,c#)编写了一个自定义适配器来显示“Mods”,其中包含一些值,如名称,游戏等。在这里你可以看到它:
public class modAdapter : BaseAdapter<Mod>
{
List<Mod> items;
Activity context;
public modAdapter(Activity context, List<Mod> items)
: base()
{
this.context = context;
this.items = items;
}
public override long GetItemId(int position)
{
return position;
}
public override Mod this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
row = LayoutInflater.From(context).Inflate(Resource.Layout.modRow, null, false);
row.FindViewById<TextView>(Resource.Id.textView1).Text = items[position].name;
row.FindViewById<TextView>(Resource.Id.textView2).Text = items[position].game;
if (items[position].favorited)
row.FindViewById<ImageView>(Resource.Id.favIcon).Visibility = ViewStates.Visible;
return row;
}
}
我在ListView的行中添加了一个图标,如果用户已将mod标记为收藏夹,则会显示该图标。项目列表是正确的,我调试和检查,我只有一个最喜欢的。
但奇怪的是,有时其他mod会被标记为收藏,即使它们未在列表中标记。我认为当您滚动并查看缺失的行时会发生这种情况。我调试并查看何时调用图标可见的行,并且仅在加载正确的mod时调用它。还有一个(列表中的最后一个)获得了图标。
我是Android开发的新手,真的希望你理解我的问题,并有一些想法来解决这个问题。谢谢!
答案 0 :(得分:3)
您的列表元素正在被回收,因此一旦视图用于&#34;收藏&#34;它将图标设置为可见。当该元素离开屏幕时,该元素的布局将在另一个元素上重复使用。该图标仍可从
中看到"key"
线。因此,添加一个else块并将可见性设置为隐藏或消失。
作为旁注,您可以查看row.FindViewById<ImageView>(Resource.Id.favIcon).Visibility = ViewStates.Visible;
和RecyclerView
,以便更好地了解回收以及对代码进行一些可能的改进。