Listview中的mytimer项目android xamarin

时间:2017-07-24 21:34:11

标签: c# android xamarin

我不知道如何每秒更改listview中项目的值。 我有一个包含多个项目的列表视图,项目由用户添加并在listview中有一个随机位置(因为它们是由用户添加的)。例如,柱塞尺寸,存储等。 物品每次都有新价值。如何更新商品的价值?

我的列表视图代码:

items = new List<string>();
        btn.Click += delegate
        {
            items.Add(myip.Text);
            ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleExpandableListItem1, items);

            listnames.Adapter = adapter;
        };

1 个答案:

答案 0 :(得分:1)

  

如何更新项目的价值?

推荐的方法是创建自己的ArrayAdapter并覆盖GetItem,如下所示:

public class MyArrayAdapter:ArrayAdapter
{
    private Context context;
    private int layoutId, textViewId;
    List<string> mList;
    public MyArrayAdapter(Context c,int layoutId,int textViewId, List<string> list) : base(c, layoutId,textViewId,list)
    {
        mList = list;
        context = c;
        this.layoutId = layoutId;
        this.textViewId = textViewId;
    }

    public override Java.Lang.Object GetItem(int position)
    {
        return mList[position];
    }
}

然后,您可以通过更新源列表来更新特定位置的值:

list[3] = "Edit Row";
adapter.NotifyDataSetChanged();

另一种解决方法是删除某一行,然后插入一个新行:

adapter.Remove(list[3]);
adapter.Insert("New Row", 3);
//the source list should also be updated.
list[3] = "New Row";
adapter.NotifyDataSetChanged();

<强>更新

要每秒更改数据,您可以使用递归函数来完成此操作:

int index=1;
...
void ChangeData()
{
    Task.Delay(1000).ContinueWith(t => {
        list[3] = "Edit Row" + index;
        adapter.NotifyDataSetChanged();
        index++;
        ChangeData();//recursive happens here
    },TaskScheduler.FromCurrentSynchronizationContext());
}