Android RecyclerView 提示No adapter attached;skipping的问题分析

项目里面,经常会用到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 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 mData) {
        this.mData = mData;
        notifyDataSetChanged();//通知更新
    }

至此,重新跟踪代码,发现,No adapter attached;skipping的提示不复存在了,心里也舒服多了。

你可能感兴趣的:(Android)