我的定制适配器显示有时错误的东西

时间:2016-05-30 20:30:15

标签: android xamarin xamarin.android adapter baseadapter

我确实为我的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开发的新手,真的希望你理解我的问题,并有一些想法来解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:3)

您的列表元素正在被回收,因此一旦视图用于&#34;收藏&#34;它将图标设置为可见。当该元素离开屏幕时,该元素的布局将在另一个元素上重复使用。该图标仍可从

中看到
"key"

线。因此,添加一个else块并将可见性设置为隐藏或消失。

作为旁注,您可以查看row.FindViewById<ImageView>(Resource.Id.favIcon).Visibility = ViewStates.Visible; RecyclerView,以便更好地了解回收以及对代码进行一些可能的改进。