【发布时间】:2014-07-05 08:52:33
【问题描述】:
我知道这个问题被问了很多,但是我花了很长时间浏览所有的 q/a 并没有解决这个问题。
我的应用程序定期从服务类启动的 AsyncTask 获取数据。异步任务上的 OnProgressUpdate 调用主要活动正在侦听的广播。数据是从意图中获取的。
在主要活动上,我全局声明数组列表。
private ArrayList<HashMap<String, String>> askOrder = new ArrayList<HashMap<String, String>>();
然后我在 oncreateview 上使用空数据设置适配器。
ListView listVask = (ListView) myFragmentView.findViewById(R.id.listViewAsk);
adapterAsk = new askOrderAdapter(getActivity(),askOrder);
listVask.setAdapter(adapterAsk);
当 asynctask 上的广播有新数据时,它会调用 sendbroadcast。为其注册了 updateUI 方法。数据已放入意图中。我查过了
public void updateUI(Intent intent){
askOrder = (ArrayList<HashMap<String, String>>) intent.getExtras().get("askOrder");
listVask = (ListView) myFragmentView.findViewById(R.id.listViewAsk);
((BaseAdapter) listVask.getAdapter()).notifyDataSetChanged();
所以当调用 notifyDataSetChanged 时不会更新适配器以获取 arraylist askOrder 中的新数据
当我更改应用程序逻辑时,我之前已经完成了这项工作。我有一个单独的类数据来存储所有数据。 asynctask 会将数据写入该类,并且数据将存储为静态变量。然后它会通知 MainActivity 重新检查数据。然后 MainActivity 将更新变量 askOrder,如下所示。
orderbookData 是存储数据的类文件。
askOrder = orderbookData.askOrder;
【问题讨论】:
-
NotifyDataSetChanged 没有更新列表视图
-
@jgriffsta 它应该可以工作。适配器在哪里设置为列表视图,当您将新项目添加到列表时需要刷新
-
@Raghunandan 抱歉,我不完全理解您的评论。我没有数据显示在列表视图中,所以我一定做错了什么。
-
@jgriffsta 您无需再次初始化列表视图。当你想刷新列表视图时调用
adapterAsk.notifyDataSetChanges() -
@jgriffsta:这里 Raghunandan 是正确的,而不是 ((BaseAdapter) listVask.getAdapter()).notifyDataSetChanged();只需添加 adapterAsk.notifyDataSetChanges();在这里您将获得相同的适配器并能够刷新您的列表。