项目里面,经常会用到RecyclerView ,其使用方式,想必大家也都清楚了。今天优化代码突然发现打印的信息里面有:
--error RecyclerView: No adapter attached; skipping layout ;
可是APP并没有因此崩溃,加上项目也比较紧,就没太注意这一块。现在有点时间了,发现了这个error提示,虽然不崩溃,但看到error信息,还是很不爽的,想法要解决之。
查阅资料之后,发现造成这个现象的可能原因有两种:
1、没有设置 recyclerview 布局方式(横向、纵向、网格等等)。
我想,大家应该不会忘记设置的,例如:
LinearLayoutManager mPerfectCourse = new LinearLayoutManager(mActivity);
mPerfectCourse.setOrientation(LinearLayoutManager.HORIZONTAL);// 设置 recyclerview 布局方式为横向布局
lvHotCourse.setLayoutManager(mPerfectCourse);
2、就是给recyclerview设置adapter的方式不妥当。
我感觉主要是这个原因,比如:
在onresume里面刷新数据,然后重新给recyclerview设置了adapter,请看下面的使用方式:
@Override
public void onResume() {
super.onResume();
//每次重新获取数据
getAPPHomePageInfo(mActivity);
}
/**
* 首页用户数据-全部数据
*/
private void getAPPHomePageInfo(final Context context) {
/**
* 这里省略网络请求的那些操作,直接看业务,默认拿到了数据集popularTeacherList
*/
initHotTeachers(popularTeacherList);
}
/**
* 初始化。。。
*/
private void initHotTeachers(List<HotTeacher> mData) {
XXRecycleViewAdapter mRecycleViewAdapter = new XXRecycleViewAdapter (mActivity, new RequestManager(), this);
mRecycleViewAdapter .setData(mData);
if (rvHotTeachers == null)
return;
rvHotTeachers.setAdapter(mRecycleViewAdapter );
layoutHotTeachers.setVisibility(View.VISIBLE);
}
上面这种写法,会多次给recyclerview.setAdapter(mRecycleViewAdapter );就会造成本文提到的问题。
正确的使用方式:
在onCreate(Activity) 或者onCreateView(fragement)里面 对adapter进行初始化、并给recyclerview.setAdapter.
adapter要公开一个更新数据的方法,在数据获取成功之后,调用adapter的该方法,执行刷新就可以了。
public void setData(List<MyCourseInfo> mData) {
this.mData = mData;
notifyDataSetChanged();//通知更新
}
至此,重新跟踪代码,发现,No adapter attached;skipping的提示不复存在了,心里也舒服多了。