BaseAdapter调用NotifyDataSetChanged不刷新

博客记录了在使用GridView显示相册时遇到的NotifyDataSetChanged不刷新问题。作者详细描述了问题出现的场景,尝试的三种不同更新item宽高的代码段以及它们的效果。最终,通过调整代码段解决了界面不刷新的难题。此博客可供遇到类似问题的开发者参考。
摘要由CSDN通过智能技术生成

记录一个今天碰到的NotifyDataSetChanged不刷新的问题,以及我的解决方法。

问题描述:GirdView显示相册,需要在进入编辑的时候,直接调用NotifyDataSetChanged刷新界面为编辑状态,从而每个格子上显示一个删除图标。但是当调用NotifyDataSetChanged后,界面死活不刷新。但奇怪的是,我另一个控制器中同样的实现方法,却可以刷新。

问题排查:

1、网上大部分所说的NotifyDataSetChanged刷新机制,需要把数据源重新 list.addAll(newlist),但是没有啥用。

2、在getView中,需要对每个item重新设置宽高,所以实现了以下代码

@Override public View getView(final int position, View v, ViewGroup parent)
 {
     AlbumGirdItemHolder itemHolder = null;
     if (v == null) {
        v = mInflater.inflate(R.layout.view_lu_album_gird_item, parent, false);
        itemHolder = new AlbumGirdItemHolder(v);
        v.setTag(itemHolder);
        itemHolder.mFiletimeTextview.setVisibility(View.GONE);
     } 
     else {
        itemHolder = (AlbumGirdItemHolder) v.getTag();
     }

     //旧更新item代码段三
     AbsListView.LayoutParams param = (AbsListView.LayoutParams)v.getLayoutParams();
     param.width = (parent.getWidth()-32)/3;
     param.height = param.width*11/16;
     v.setLayoutParams(param);

    //旧更新item比例代码段二
    /*
    AbsListView.LayoutParams param = (AbsListView.LayoutParams)v.getLayoutParams();
    int width = (parent.getWidth()-8)/3;
    int height = width*11/16;
    if (param.width != width || param.height != height) {
        param.width = width;
        param.height = height;
        v.setLayoutParams(param);
    }
    */

    //旧更新item代码段一
    /*
    int width = (parent.getWidth()-8)/3;
    AbsListView.LayoutParams param = new AbsListView.LayoutParams(
                width, width*11/16);
    v.setLayoutParams(param);

    */

}

 1、最开始,我是使用“旧更新item代码段一”来更新item的宽高,调用NotifyDataSetChanged时,界面可以正常刷新。但是不知道为啥,它会导致我的第一个item界面异常(比如说图片通过Glide加载不出来)。在另一个fragment中实现的却又没问题。

2、所以就改成了“旧更新item代码段二”,然后界面是正常了,但是当调用NotifyDataSetChanged时,界面一直不刷新。此时按大家所说的尝试重新list.addAll(newlist),也没有啥效果。

3、就改成了“旧更新item代码段三”,就正常了。

原理我不懂,也不深究,只希望做个笔记,也希望对有同样问题的朋友有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值