Xamarin Android: 定期更新 ListFragment 的项目
Xamarin Android: update ListFragment's items periodically
这是我的代码:
public class ClientsFragment : ListFragment
{
List<ClientViewModel> list;
Timer timer;
public override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
await LoadClientList();
ListAdapter = new ClientAdapter(Activity, list);
timer = new Timer(5000);
timer.Elapsed += Timer_Elapsed;
timer.Enabled = true;
}
private async void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
await LoadClientList();
}
public async Task LoadClientList()
{
list = await ClientViewModel.GetAllClients();
}
}
一切正常,除了更新内容。我读过,需要 NotifyDataSetChanged 函数,但我不知道如何实现它,因为在网络上找到的每个示例都与 Activity 或自定义 ListView 相关联,而不是 ListFragment。我不知道我的计时器是否也写得很好。感谢帮助
编辑:
解决方案是在 LoadClientList
方法的底部使用 Activity.RunOnUiThread(() => { ListAdapter = new ClientAdapter(Activity, list); });
。
基本上,如果您想重置片段中的内容,您将需要 re-attach 您的场景中的适配器。
理想情况下,一旦您对 Adapter
执行某些操作,例如 Add()
、Remove()
、Insert()
、Clear()
,您将调用 NotifyDataSetChanged
等
所以有几种方法可以解决这个问题:
只需 re-create 具有包含更新列表的新列表的适配器。
在您的自定义 Adapter
中,只需允许您自己更改 List
内部可能调用 re-attach 适配器或调用 NotifyDataSetChanged
使用以上各自的方法。
注意:您可能需要确保在 UI 线程上调用 NotifyDataSetChanged
。
这是我的代码:
public class ClientsFragment : ListFragment
{
List<ClientViewModel> list;
Timer timer;
public override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
await LoadClientList();
ListAdapter = new ClientAdapter(Activity, list);
timer = new Timer(5000);
timer.Elapsed += Timer_Elapsed;
timer.Enabled = true;
}
private async void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
await LoadClientList();
}
public async Task LoadClientList()
{
list = await ClientViewModel.GetAllClients();
}
}
一切正常,除了更新内容。我读过,需要 NotifyDataSetChanged 函数,但我不知道如何实现它,因为在网络上找到的每个示例都与 Activity 或自定义 ListView 相关联,而不是 ListFragment。我不知道我的计时器是否也写得很好。感谢帮助
编辑:
解决方案是在 LoadClientList
方法的底部使用 Activity.RunOnUiThread(() => { ListAdapter = new ClientAdapter(Activity, list); });
。
基本上,如果您想重置片段中的内容,您将需要 re-attach 您的场景中的适配器。
理想情况下,一旦您对 Adapter
执行某些操作,例如 Add()
、Remove()
、Insert()
、Clear()
,您将调用 NotifyDataSetChanged
等
所以有几种方法可以解决这个问题:
只需 re-create 具有包含更新列表的新列表的适配器。
在您的自定义
Adapter
中,只需允许您自己更改List
内部可能调用 re-attach 适配器或调用NotifyDataSetChanged
使用以上各自的方法。
注意:您可能需要确保在 UI 线程上调用 NotifyDataSetChanged
。