在项目中遇到, adapter中刷新数据无效,不能刷新数据!
1.首先先检查数据是否改变了,在数据源头debug ,
1.1有没有可能List<object> lists,这个list有没有新new过,不能新new,要用notifyDataSetChanged()的话,更新数据一定要保持与之前的setAdapter(,lists)中的lists是同一个对象,<注意,引用的赋值,在这一块会作怪!>
1.2 lists的更新数据不能直接比如<不能,lists=lists2,不能直接相等>,要用 lists.addAll(lists2)
2.在数据正确的情况下,然后在检查,notifyDataSetChanged()的执行位置是否在数据改变完之前?
3.更新数据的是否在UI线程中,如果不在把adapter.notifyDataSetChanged()放在UI线程中 ,我是在Fragment中刷新的
getActivity().runOnUiThread(new Refresh(title));
//异步刷新adapter class Refresh implements Runnable { String titleStr; public Refresh(String titleStr) { this.titleStr = titleStr; } @Override public void run() { List<String> newData = NewCommentSharedPreferenceUtil.getData(getActivity()); if(newData.size()!=0){ for (NewsCategory newsCategory : newsCategories) { newsCategory.setState(false); } for (int i = 0; i < newData.size(); i++) { Log.i(TAG,"--新评论有哪几个?newData=="+newData.get(i)); for (int j=0;j<newsCategories.size();j++) { Log.i(TAG,"--getname=="+newsCategories.get(i).getName()+"=newData.get(i)="+newData.get(i)); if (newsCategories.get(j).getName().equals(newData.get(i))) { newsCategories.get(j).setState(true); } } } }else{ for (NewsCategory newsCategory : newsCategories) { newsCategory.setState(false); } } Log.i(TAG, "--新mShareClassificationAdapter==" + mShareClassificationAdapter); mShareClassificationAdapter.notifyDataSetChanged(); } }
或者,通过handle Message 刷新数据