首页 > 解决方案 > Xamarin,列表视图更新

问题描述

我对 Xamarin 的 ListVIew 更新有疑问。

你好。

他目前正在学习 Xamarin。我现在要创建的就像是对 Listview 的项目更新。

有一个名为 TX 1 的 ListView 项。在这里按下 TX 1 时,TX 1 --- > TX 2 --- > TX 3 --- > TX 1 这就是我们调用不同事件的方式。

这是我的代码。

public class MainActivity : Activity
{
    ArrayAdapter<string> lstAdapter;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        int _Position = 0;
        string[] _Test_ListView_tow = { "TX1", "TX2", "TX3" };
        string[] _Set_RD_Data = { _Test_ListView_tow[_Position], "Display" };

        ListView _Test_ListView = FindViewById<ListView>(Resource.Id._Test_ListView);
        lstAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, _Set_RD_Data);
        _Test_ListView.Adapter = lstAdapter;


        _Test_ListView.ItemClick += (s, e) =>
        {
            switch(e.Position)
            {
                case 0:
                    if(_Position < 2)
                    {
                        _Position++;
                        _Set_RD_Data[0] = _Test_ListView_tow[_Position];
                        lstAdapter.NotifyDataSetChanged();
                        Console.WriteLine("Data : " + _Set_RD_Data[0].ToString());
                        Toast.MakeText(this, _Set_RD_Data[0] + "Select", ToastLength.Short).Show();
                    }
                    else if (_Position == 2)
                    {
                        _Position = 0;
                        _Set_RD_Data[0] = _Test_ListView_tow[_Position];
                        lstAdapter.NotifyDataSetChanged();
                        Console.WriteLine("Data : " + _Set_RD_Data[0].ToString());
                        Toast.MakeText(this, _Set_RD_Data[0] + "Select", ToastLength.Short).Show();
                    }
                    break;
            }
        };
    }
}

我们如何做到这一点?当前的情况,由于 Toast,改变了内容、数据。但它不会改变 ListView 所说的内容。请告诉我。

标签: androidlistviewxamarin

解决方案


您可以使用Remove()andInsert()来更新项目。

首先,将_Set_RD_Data表单类型更改string[]List<string>. 然后你可以调用Remove()andInsert()方法来操作适配器中的数据。从适配器中删除_Set_RD_Data[0],然后修改该_Set_RD_Data[0]值。最后,将其插入到索引 0 处的适配器。

这是代码:

public class MainActivity : AppCompatActivity
{
    ArrayAdapter<string> lstAdapter;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);

        int _Position = 0;
        string[] _Test_ListView_tow = { "TX1", "TX2", "TX3" };
        List<string> _Set_RD_Data = new List<string>() { _Test_ListView_tow[_Position], "Display" };

        ListView _Test_ListView = FindViewById<ListView>(Resource.Id._Test_ListView);
        lstAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, _Set_RD_Data);
        _Test_ListView.Adapter = lstAdapter;

        _Test_ListView.ItemClick += (s, e) =>
        {
            switch (e.Position)
            {
                case 0:
                    if (_Position < 2)
                    {
                        _Position++;
                        lstAdapter.Remove(_Set_RD_Data[0]);
                        _Set_RD_Data[0] = _Test_ListView_tow[_Position];
                        lstAdapter.Insert(_Set_RD_Data[0], 0);
                        Toast.MakeText(this, _Set_RD_Data[0] + "Select", ToastLength.Short).Show();
                    }
                    else if (_Position == 2)
                    {
                        _Position = 0;
                        lstAdapter.Remove(_Set_RD_Data[0]);
                        _Set_RD_Data[0] = _Test_ListView_tow[_Position];
                        lstAdapter.Insert(_Set_RD_Data[0], 0);                            
                        Toast.MakeText(this, _Set_RD_Data[0] + "Select", ToastLength.Short).Show();
                    }
                    break;
            }
        };
    }
}

结果是:
在此处输入图像描述


推荐阅读