通过广播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)
(静态在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)