RecyclerView刷新显示的问题

在Android Studio中,RecyclerView使用整体上比ListView要好——个人感觉。

主要体现在背景设置——可以为每一个item设置不同的背景;可以反复加载同一个数据,对于测试,还是应有,都能提高效率;还有一个是防内存泄漏。

但有一点,我很久以来都没有搞清楚——那就是在更新完数据后,调用adapter.notifyItemInserted(int)【或者其系列的其它方法】,总是不能刷新显示。

不过好在现在搞清楚了,主要是学习时就是半路截胡,没有系统学习过RecyclerView显示的问题。

究其原因,是因为只是更新了.db中的数据,而没有更新从.db中读取出来用于显示的数据。差不多就是这个意思:

一套数据是存在内存卡的。这个SD卡上的数据,无论用户如何更新,它都不会自动展示在RecyclerView上。要想展示出来,必须采取措施,比如用set的方式,直接更新某个item的数据;比如再次读取SD卡上数据,再调用adapter.notifyItemInserted(int)【或者其系列的其它方法】,就能显示了。

另外,还需要注意的时,如果是再次读取。记得调用.clear清空以前读取的数据。不然显示的内容会加倍哦~!

在使用上面的方法更新,会随之引来另一个更棘手的问题——在某些情况下,要想刷新数据,就必须用到adapter,而adapter往往是带参的。得往里传参才用得起来!这些参数有Context,Activity,ArrayList<>等。有时候,只是为了更新其中一个数据,传的参数少则忍了,传的参数多,比如有一二十个……这时候,要初始化,要清空,要读取,要防内存泄漏——成百行的代码,感觉真的有累——不是科班出生,没有系统学习过这种Java架构,真是难以招架。

针对上述问题。有两个比较简单的方法。

第一个,调用mActivity.recreate();——更新完内存中的数据后,调用它能一键刷新你所有的显示,比如关连的图形,或者其它显示的文字等。缺点是:1)虽然敲的代码简单了,但是计算机内部运行的内容可多了,因为是全刷新!有用的,没用的,全刷!2)屏幕会闪一下,视觉很不爽。

第二个,调用

Intent intent=new Intent(this,MyActivity.class);

startActivity(intent);

finish();

自己跳转到自己的页面。官方给的高大上的代码,不过后台会报黄“no activity for token……”

这个与第一个方法差不多——又费马达又费电!使用过程中一定要记得调用finish();不然反复操作后,点击Android的返回键,显示就会有问题!

上述第一个方法和第二个方法会随之带来另外一个问题:

比如OneActivity跳转到TwoActivity后,需要拿到某个回执。但是,你在TwoActivity中反复地调用recreate();导致这个回执就会获取失败。

另外,补充一下为每个item设置不同背景的代码——这绝对是个神器!不同的颜色能区分出很多东西,让用户的效率提升。


//以下代码要写在Adapter的onBindViewHolder()方法中。
//或者你想要的其它判断条件
if(list_id.get(position).equals("1")){
    //先在drawable写一个layer-list,调出你想要的背景颜色
    int drawableResId = R.drawable.shadow_red;
    //这里记得给Adapter传参mContext
    Drawable myBackground = ContextCompat.getDrawable(mContext, drawableResId);
    //这里为位置为1的item设置背景颜色。
    holder.layout_myLayout.setBackground(myBackground);
}
//位置1处的layout_myLayout的颜色就与在.xml中设置的背景颜色不一样。

你可能感兴趣的:(android,studio,java)