【发布时间】:2017-05-25 03:15:52
【问题描述】:
在this 文章之后,我创建了一个显示列表的简单应用程序。我从 Web 服务(.asmx Web 服务)获得的列表。
我想每 5 秒自动更新一次RecyclerView,但我不知道该怎么做。
在 WinForms 中我会使用 Timer 组件,但我不知道它在 Xamarin 中是如何工作的。
MainActivity.cs
[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();
}
}
更新 我按照 York Shen 的建议在活动课上创建了新方法
void ChangedData()
{
Task.Delay(5000).ContinueWith(t =>
{
var newData = ConnectionItem.GetList();
adapter.RefreshItems(newData);
ChangedData();
}, TaskScheduler.FromCurrentSynchronizationContext());
}
这是我在适配器类中的更新方法:
public void RefreshItems(List<ConnectionItem> newItems)
{
items.Clear();
items = newItems;
NotifyDataSetChanged();
}
【问题讨论】:
-
我在适配器中尝试了
notifyDataSetChanged()方法,但没有成功 -
我会为您的任务使用
Handler。 -
this 处理程序?你能展示一下如何用c#写这个吗?
-
一点点谷歌搜索就可以了。相信我,这很容易。搜索
android handler xamarin -
对不起,这似乎是一个ANR,你不能在主线程中做太多的工作。你能分享一个关于这个的演示吗?我不知道你在主线程中做了什么。
标签: c# android xamarin.android