【问题标题】:How to invalidate ListView for new data when using ListAdapter使用 ListAdapter 时如何使新数据的 ListView 无效
【发布时间】:2015-09-26 00:28:39
【问题描述】:

我正在使用片段中的默认列表视图来显示从 URL 调用的数据。有一个 SwipeRefreshLayout 包含 ListView 。但是,当我刷新时,旧数据仍在列表视图中,而新数据只是添加到列表顶部。有没有办法使旧数据失效?
我使用了从 SimpleAdapter 类创建的 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);

我已尝试将适配器设为 null 或使用列表视图附带的 invalidate() 方法。适配器没有notifyDataSetChanged() 方法。
newsItemList 是一个包含来自 URL 的数据的 ArrayList。声明如下:
ArrayList<HashMap<String,String>> newsItemList;

【问题讨论】:

    标签: java android android-listview swiperefreshlayout


    【解决方案1】:

    重要的是: 获取新数据时是否清除 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); 
    

    【讨论】:

    • 每次我在调用之前将其设为 null 2the URL 它给了我一个 null 错误。
    • 除此之外我应该能够点击任何新闻并阅读,但较新的新闻是唯一会返回旧数据集带来的内容和错误的新闻,即使它们在同一个列表中
    • 其实这是正确的。我在 onViewCreated() 方法中初始化了对象,而是将该行移至刷新时调用的方法。
    【解决方案2】:

    尝试使用adapter.clear(); 将其放入执行刷新时执行的方法中!

    【讨论】:

    • ListAdapter 没有这个方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多