Xamarin.Android如何自动更新RecyclerView

时间:2017-05-25 03:15:52

标签: c# android xamarin.android

this篇文章之后,我创建了一个显示List的简单应用程序。列表我来自Web服务(.asmx Web服务)。

我希望每5秒自动更新Category.all,我不知道如何制作它。

在winforms中我使用了Timer组件,但我不知道这在xamarin中是如何工作的。

MainActivity.cs

ReciclerView

更新 我在活动课中创建了新方法,正如York Shen所建议的那样

[Activity(Label = "CibMonitor", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : AppCompatActivity
    {
        RecyclerView recyclerView;
        RecyclerView.LayoutManager layoutManager;
        ConnectionItemsAdapter adapter;
        ConnectionItem[] connectionItems;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            var ci = new ConnectionItem();

            //Get list from web service
            connectionItems = ci.GetList().ToArray();

            //Setup RecyclerView
            adapter = new ConnectionItemsAdapter(this, connectionItems);

            recyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerView);

            recyclerView.SetAdapter(adapter);

            ChangedData();
        }
    }

这是我在适配器类中的更新方法:

void ChangedData()
{
    Task.Delay(5000).ContinueWith(t =>
    {
        var newData = ConnectionItem.GetList();
        adapter.RefreshItems(newData);
        ChangedData();
    }, TaskScheduler.FromCurrentSynchronizationContext());
}

我的应用停止了工作,仅此消息也不例外:enter image description here

1 个答案:

答案 0 :(得分:1)

您可以创建一个Task,它可以帮助您每5秒更新一次recyclerView:

void ChangedData()
    {
        Task.Delay(5000).ContinueWith(t =>
        {
           adapter.NotifyDataSetChanged();
           ChangedData();//This is for repeate every 5s.
        }, TaskScheduler.FromCurrentSynchronizationContext());
    }

修改

很抱歉迟到的回复,拨打ChangedData()中的Task.Delay()可以解决重复问题。您可以在invoke方法中ChangedData() OnCreate()。希望这可以帮到你。 :)