我必须每隔3秒刷新一次listview(我在ListFragment中)所以我开始一个新的Thread,启动runOnUiThread来编辑UI。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new Thread(new Runnable() {
public void run() {
do{
ObjectMapper mapper = new ObjectMapper();
VideoData element = null;
try {
element = mapper.readValue(new URL("http://192.168.4.111:3232/videodata.json").openStream(), VideoData.class);
} catch (Exception e) {
e.printStackTrace();
}
final VideoData newData = element;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
hd = newData.getChildren().get(0).getChildren().get(id);
vba.notifyDataSetChanged();
}
});
try {
Thread.sleep(3*1000);
} catch (InterruptedException e) {}
}while(true);
}
}).start();
setAdapter();
}
我在网上解析数据,并更新参考。
private void setAdapter()
{
if(id == 0)
hd = hd.getChildren().get(0);
vba = new ValueBaseAdapter(getActivity(), 0, hd.getChildren());
setListAdapter(vba);
}
我看到当调用notifyDataSetChanged时,会调用getView(并且没关系)但我有旧引用,这是我第一次调用setAdapter时的引用。 此外,如果我在run()中设置null hd,不会更改任何内容,listview不会更改。 错误在哪里?感谢。
答案 0 :(得分:0)
似乎notifyDataSetChanged()只有在使用List
时才更新适配器的数据