这是我的代码:
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
。
答案 0 :(得分:1)
基本上,如果要重置片段中的内容,则需要在场景中重新连接适配器。
理想情况下,当您对NotifyDataSetChanged
执行某些操作时,请致电Adapter
,例如Add()
,Remove()
,Insert()
,Clear()
等
所以有几种方法可以解决这个问题:
只需使用包含更新列表的新列表重新创建适配器。
在您的自定义Adapter
中,只需允许自己更改可能要求重新连接适配器的List
或使用上述相应方法呼叫NotifyDataSetChanged
。 / p>
注意:您可能希望确保在UI线程上调用NotifyDataSetChanged
。