通过广播更新RecyclerView

通过广播BroadCastReceiver监听ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REMOUVED(apk安装,卸载),更新RecyclerView
(静态在AndroidManifest.xml中注册即可,代码不再展示).
 @Override
    public void onReceive(Context context, Intent intent) {
        PackageManager manager = context.getPackageManager();
        if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED) ||
               intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
            updateData(context);
        }
    }

updateData()方法,做更新操作 ,adapter实例通过RecyclerViewFragment自身的静态变量instance获取.
public void updateApp(Context context) {

        if (RecyclerViewFragment.instance != null) {
            if (RecyclerViewFragment.instance.adapter != null) {
                int pos = RecyclerViewFragment.instance.adapter.getItemCount()-2;
                ArrayList<ResolveInfo> dataList = new ArrayList<ResolveInfo>();
                dataList = getInstallAppInfo();  //获取新数据
                RecyclerViewFragment.instance.contentList.clear(); //clear旧数据
                RecyclerViewFragment.instance.contentList.addAll(dataList);
                //RecyclerViewFragment.instance.adapter.notifyDataSetChanged();
                RecyclerViewFragment.instance.adapter.notifyItemRangeChanged(pos,1);
            }
        }

    }
此处我们使用notifyDateSetChanged()更新数据焦点会丢失或者乱跳,换用notifyItemRangeChanged(pos,1)即可,pos表示更新的数据显示位置,1表示数据个数
(焦点乱跳或丢失问题解决方案,引用其他博客http://blog.csdn.net/sufutian/article/details/54729338?utm_source=itdadao&utm_medium=referral)

猜你喜欢

转载自blog.csdn.net/King0217/article/details/72400777