列表视图数据多次显示

时间:2017-03-15 11:43:00

标签: android xamarin xamarin.android

当我使用json绑定listview时,数据在listview中显示很多时间。当我在listview中向下滚动时,再次重复数据显示在列表视图中

class.cs

    namespace HSAPP
{
    class ContListViewSpecNameClass : BaseAdapter<GetSpecNames>
    {
        List<GetSpecNames> objList;

        Activity objActivity;

        public ContListViewSpecNameClass (Activity objMyAct,List<GetSpecNames> objMyList) : base()
        {
            this.objActivity = objMyAct;
            this.objList = objMyList;
        }

        public override GetSpecNames this[int position]
        {
            get
            {
                return objList[position];
            }
        }

        public override int Count
        {
            get
            {
                return objList.Count;
            }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = objList[position];
            //View objView = convertView;

            if (convertView == null)
            {
                convertView = objActivity.LayoutInflater.Inflate(Resource.Layout.ContListViewSpecName, null);
                convertView.FindViewById<TextView>(Resource.Id.tvSpecID).Text = item.SpecID;
                convertView.FindViewById<TextView>(Resource.Id.tvSpecName).Text = item.SpecName;
            }
            return convertView;
        }
    }
}

activity.cs

    private void BindControl_BindSpecCompleted(object sender, BindControl.BindSpecCompletedEventArgs e)
{
    jsonValue = e.Result.ToString();

    if (jsonValue == null)
    {
        Toast.MakeText(this, "No Data For Bind", ToastLength.Long).Show();
        return;
    }

    try
    {
        JArrayValue = JArray.Parse(jsonValue);
        list = new List<GetSpecNames>();
        int count = 0;
        while (count < JArrayValue.Count)
        {
            GetSpecNames getSpecName = new GetSpecNames(JArrayValue[count]["SpecID"].ToString(), JArrayValue[count]["SpecName"].ToString());
            list.Add(getSpecName);
            count++;
        }
        listView.Adapter = new ContListViewSpecNameClass(this, list);
        listView.ItemClick += ListView_ItemClick;
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.ToString(), ToastLength.Long).Show();
    }
}

private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    var curItem = list[e.Position];
    Toast.MakeText(this, curItem.SpecID + ' ' + curItem.SpecName, ToastLength.Long).Show();
}

输出: -

This is 1st image

This is 2nd image when scroll down

1 个答案:

答案 0 :(得分:0)

我认为这是因为您在convertView时没有更新convertView != null

来自文档

  

convertView - 如果可能,重用旧视图。注意:你应该   检查此视图是否为非null且之前是否为适当的类型   使用。如果无法转换此视图以显示   正确的数据,这种方法可以创建一个新的视图。