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

所以有几种方法可以解决这个问题:

  1. 只需 re-create 具有包含更新列表的新列表的适配器。

  2. 在您的自定义 Adapter 中,只需允许您自己更改 List 内部可能调用 re-attach 适配器或调用 NotifyDataSetChanged 使用以上各自的方法。

注意:您可能需要确保在 UI 线程上调用 NotifyDataSetChanged