Xamarin Android:定期更新ListFragment的项目

时间:2016-01-13 05:10:12

标签: android xamarin android-listfragment

这是我的代码:

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函数,但我不知道如何实现它,因为在web上找到的每个示例都与Activity或自定义ListView连接,而不是ListFragment。我不知道我的计时器是否也写得很好。谢谢你的帮助

修改

解决方案是在Activity.RunOnUiThread(() => { ListAdapter = new ClientAdapter(Activity, list); });方法的底部使用LoadClientList

1 个答案:

答案 0 :(得分:1)

基本上,如果要重置片段中的内容,则需要在场景中重新连接适配器。

理想情况下,当您对NotifyDataSetChanged执行某些操作时,请致电Adapter,例如Add()Remove()Insert()Clear()

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

  1. 只需使用包含更新列表的新列表重新创建适配器。

  2. 在您的自定义Adapter中,只需允许自己更改可能要求重新连接适配器的List或使用上述相应方法呼叫NotifyDataSetChanged。 / p>

  3. 注意:您可能希望确保在UI线程上调用NotifyDataSetChanged