【问题标题】:BaseAdapter notifyDataSetChanged() doesn't update object referenceBaseAdapter notifyDataSetChanged() 不更新对象引用
【发布时间】:2013-10-13 12:05:26
【问题描述】:

我必须每 3 秒刷新一次列表视图(我在 ListFragment 中),因此我启动了一个新线程,该线程启动 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 也不会改变。 错误在哪里?谢谢。

【问题讨论】:

    标签: android listview android-adapter baseadapter


    【解决方案1】:

    似乎 notifyDataSetChanged() 仅在您使用 List 时才更新适配器的数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多