使用 ListAdapter 时如何使新数据的 ListView 失效
How to invalidate ListView for new data when using ListAdapter
我在片段中使用默认列表视图来显示从 URL 调用的数据。有一个包含 ListView 的 SwipeRefreshLayout。但是,当我刷新时,旧数据仍在列表视图中,新数据只是添加到列表顶部。有没有办法让旧数据失效?
我使用了从 SimpleAdapter class 创建的 ListAdapter,如下所示:
ListAdapter adapter = new SimpleAdapter(getActivity(), newsItemList, R.layout.list_item, new String[]{TAG_TITLE, TAG_DATE, TAG_OWNER}, new int[]{R.id.news_title, R.id.news_date, R.id.news_owner});
lvGeneralNews.setAdapter(adapter);
我试过让adapter为null或者使用listview自带的invalidate()
方法。适配器没有 notifyDataSetChanged()
方法。
newsItemList
是一个 ArrayList,它具有来自 URL 的数据。它是这样声明的:
ArrayList<HashMap<String,String>> newsItemList;
尝试使用adapter.clear();
将它放在执行刷新时执行的方法中!
重要的是:
获取新数据时是否清除 ArrayList> newsItemList?
如果你这样做
只是重复:
ListAdapter adapter = new SimpleAdapter(getActivity(), newsItemList, R.layout.list_item, new String[]{TAG_TITLE, TAG_DATE, TAG_OWNER}, new int[]{R.id.news_title, R.id.news_date, R.id.news_owner});
lvGeneralNews.setAdapter(adapter);
我在片段中使用默认列表视图来显示从 URL 调用的数据。有一个包含 ListView 的 SwipeRefreshLayout。但是,当我刷新时,旧数据仍在列表视图中,新数据只是添加到列表顶部。有没有办法让旧数据失效?
我使用了从 SimpleAdapter class 创建的 ListAdapter,如下所示:
ListAdapter adapter = new SimpleAdapter(getActivity(), newsItemList, R.layout.list_item, new String[]{TAG_TITLE, TAG_DATE, TAG_OWNER}, new int[]{R.id.news_title, R.id.news_date, R.id.news_owner});
lvGeneralNews.setAdapter(adapter);
我试过让adapter为null或者使用listview自带的invalidate()
方法。适配器没有 notifyDataSetChanged()
方法。newsItemList
是一个 ArrayList,它具有来自 URL 的数据。它是这样声明的:
ArrayList<HashMap<String,String>> newsItemList;
尝试使用adapter.clear();
将它放在执行刷新时执行的方法中!
重要的是: 获取新数据时是否清除 ArrayList> newsItemList? 如果你这样做 只是重复:
ListAdapter adapter = new SimpleAdapter(getActivity(), newsItemList, R.layout.list_item, new String[]{TAG_TITLE, TAG_DATE, TAG_OWNER}, new int[]{R.id.news_title, R.id.news_date, R.id.news_owner});
lvGeneralNews.setAdapter(adapter);