摘要:
做新闻列表的时候,经常通过调用BaseAdapter中提供的notifyDataSetChanged方法来刷新列表,这个时候出现刷新列表后,ListView列表数据无变化的情况,出现这个结果的原因是给同一个List对象赋予了不同的引用,解决的办法是调用List中的add方法,将需要添加的数据再加入到List对象中,问题解决。
关键代码:
- //从后台获取到的数据,以实体形式存储到List中
- private List<NewsMessageBean> entrysList = new ArrayList<NewsMessageBean>();
- //默认获取第一页数据,下拉刷新获取第二页、第三页
- private int page_id=1;
- private void getNewsMainListDataByThree(String categoryId, String rows,String offset, String direction) {
- NewsMainGetDataListAPI.getNewsListNearBy(categoryId, rows, offset,direction, new HttpResponseHandler(getActivity(), false) {
- @Override
- public void doSuccess(boolean isSuccess, String json) {
- if (isSuccess) {
- /**
- * 加载第一页数据
- */
- if (page_id == 1) {
- entrysList = GsonUtil.jsonArray2List(json,NewsMessageBean.class);
- if (entrysList.size() <= 0) {
- NothingListViewAdapter noAdapter = new NothingListViewAdapter(getActivity());
- FreshMansListView(noAdapter);
- }
- new Thread() {
- @Override
- public void run() {
- Message message = new Message();
- message.what = REFRESH_NEWS_CONTENT;
- handler.sendMessage(message);
- }
- }.start();
- }
- /**
- * 如果下拉刷新了ListView列表,或者下拉加载了列表
- */
- List<NewsMessageBean> entrysListNews = GsonUtil.jsonArray2List(json, NewsMessageBean.class);
- if (entrysListNews.size() <= 0) {
- NothingListViewAdapter noAdapter = new NothingListViewAdapter(getActivity());
- FreshMansListView(noAdapter);
- }
- // 最关键的一步,如果你是这样写:entrysList=entrysListNews,列表数据不刷新,应该通过add方法,添加数据到同一个entrysList中
- Iterator<NewsMessageBean> iter = entrysListNews.iterator();
- while (iter.hasNext()) {
- entrysList.add(iter.next());}
- }
- }
- });
- }
刷新列表代码:
- private void setNewsAdatpers() {
- if (null != adapter) {
- adapter.notifyDataSetChanged();
- } else {
- adapter = new HotNewsMainListAdapter(entrysList, getActivity());
- FreshMansListView(adapter);//这个方法添加适配器
- }
- }
分析:
在上面的List对象entrysList中,我们刷新ListView的时候,不是直接将新获取的entrysListNews直接赋值给entrysList,而是通过遍历entrysListNews后将每个NewsMessageBean添加到原来的entrysList对象中,这样在adapter调用notifyDataSetChanged方法,就可以刷新ListView列表数据。直接将entrysListNews直接赋值给entrysList后,演示demo如下图:
你可能感兴趣的文章
来源:TeachCourse,
每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/792.html ,谢谢支持!
转载请注明出处: https://www.teachcourse.cn/792.html ,谢谢支持!