我有一个带有 FragmentStatePagerAdapter 的 ViewPager。每个页面加载一个包含 ListView 的 fragment 。此 ListView 加载许多 TextView,这些 TextView 从静态 ArrayList 获取文本。此静态 ArrayList 在 AsyncTask 中使用来自服务器的数据进行更新。好吧,我想在每次更新 ArrayList 时更新 ListView。如果我在 ViewPager 适配器上使用 notifyDataSetChanged() 它不起作用,我必须访问每个 ListViewadapter。有什么建议吗?
这是我的 AsyncTask doinBackground 方法:
protected Object doInBackground(Object[] params) {
if(socket!=null){
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
while(true){
try {
s = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
Type type = new TypeToken<ArrayList<VirtualSensor>>(){}.getType();
Gson gson = new Gson();
_sensorComponents =(ArrayList<VirtualSensor>) gson.fromJson(s, type);
Log.d("Mesage", _sensorComponents.get(1).get_value()+"");
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}
return null;
}
更新:经过一些测试后,我发现当我在 viewpager 中有超过 1 个页面时会出现问题。我使用 FragmentStatePagerAdapter。
最佳答案
使用EventBus
是更好的解决方案。
也试试这个。
与其将数据分配给您的 ArrayList
,不如尝试向其添加内容。
改变这一行
_sensorComponents =(ArrayList<VirtualSensor>) gson.fromJson(s, type);
到
_sensorComponents.clear();
_sensorComponents.add((ArrayList<VirtualSensor>) gson.fromJson(s, type));
然后通过调用 adapter.notifyDataSetChanged();
通知您的数据集
关于java - 如何将 notifyDataSetChanged() 与包含带有 ListView 的 fragment 的 viewpager 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834660/