ListView和GridView调用notifyDataSetChanged界面不刷新

在项目中遇到的一个问题,GridView调用notifyDataSetChanged方法,界面不刷新,代码如下:

mImagePathList = Arrays.asList(mCurrentDirectory.list());
mGridView.notifyDataSetChanged();

调用notifyDataSetChanged,界面不刷新,主要有下面几个原因:

1、数据源没有更新,调用notifyDataSetChanged无效。 2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。 3、数据源更新了,但是adapter没有收到消息通知,无法动态更新列表。
我们上面的方法,是第二个原因造成的:
mImagePathList = Arrays.asList()是重新创建了一个新的mImagePathList对象,引用改变,故界面没有刷新。
为了保证mImagePathList对象不变,我们只能通过add的方式来做:
mImagePath.addAll(Arrays.asList(mCurrentDirectory.list()));
mGridView.notifyDataSetChanged();
出现了下面的java.lang.UnsupportedOperationException 的异常。
mImagePath的初始化代码如下:
mImagePathList = Arrays.asList(mCurrentDirectory.list()); 
造成这个异常的原因是:

解决方法就是将mImagePathList转化成ArrayList,然后再调用addAll来对集合进行操作。
mImagePathList = new ArrayList<>(Arrays.asList(mCurrentDirectory.list()));

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