程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何保存完整的回收者视图数据?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何保存完整的回收者视图数据??

开发过程中遇到如何保存完整的回收者视图数据?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何保存完整的回收者视图数据?的解决方法建议,希望对你解决如何保存完整的回收者视图数据?有所启发或帮助;

说明

假设我有一个 RecyclerVIEw 可以显示内部存储中 extras 文件夹中的 50 张照片。虑到这一点,那 50 张照片不会随时改变。因此,当用户启动应用程序时,它会从互联网上获取 50 张照片并保存在内部存储中。如果用户启动照片活动,则将运行从 extras 文件夹中获取这 50 张照片的循环。此循环将从内部存储中获取所有照片,并将它们的 BUCKET_disPLAY_nameextras 进行比较。如果两者相等,则只有它会显示在 recyclerVIEw

虑到这种情况,我想将 recyclerVIEw statedata 保存在内部存储中。因此,当用户下次打开应用程序时,它不会获取所有照片,而是直接加载已保存照片的 recyclervIEw。

获取方法

 public ArrayList<ImageModel> fetchImages() {
        uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        projection = new String[]{MediaStore.Images.Media._ID,MediaStore.Images.Media.bUCKET_disPLAY_namE};
        cursor = activity.getApplicationContext().getContentResolver().query(uri,projection,null,null);
        column_index_data = cursor.getcolumnIndexOrThrow(MediaStore.Mediacolumns._ID);
        arrayList.clear();          
        while (cursor.movetoNext()) {
            long mediaId = cursor.getLong(column_index_data);
            name = cursor.getString(cursor.getcolumnIndexOrThrow(MediaStore.Images.Media.bUCKET_disPLAY_Name));
            if (name.equals("extras")) {       
                Uri uriMedia = Uri.withAppendedpath(uri,"" + mediaId);
                ImageModel imageModel = new ImageModel();
                imageModel.setUri(uriMedia.toString());
                arrayList.add(imageModel);
            }
        }
        cursor.close();
        return arrayList;
    }

如果用户有很多照片而不是必需的 50 张照片,则在执行此方法时可能会花费大量时间。

那么,

 arrayList = fetchImages();
adapter = new PhotosAdapter(requireActivity().getApplicationContext(),arrayList,getActivity(),this,this);
        recyclerVIEw.setAdapter(adapter);

使用此方法图像在 recyclerVIEw 中加载。

那么,有没有办法保存加载的RecyclerVIEwRecyclerVIEw Data

怀疑

https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.State

状态对象还可以保存任意数据,由资源 ID 标识。

我对任意数据了解不多,但是,如果它意味着 recyclerVIEw's 数据,那么我如何使用 RecyclerVIEw.State 对象来恢复 {{1} 中的数据}?

注意

假设我可以在内部存储中保存任何类型的对象并将该对象加载到另一个相同类的对象中。

编辑 如答案中所述,无法存储加载的 recyclerVIEw。相反,需要缓存数据。由于缓存内存也在内部存储中,它迫使我的应用程序跳过帧,因为我正在我的应用程序的 recyclerVIEw 内加载图像。我可以创建一个新线程,它将在后台处理它并且没有跳帧。但是,它会产生我不想要的眨眼效果。

如何保存完整的回收者视图数据?

如何保存完整的回收者视图数据?

解决方法

我对任意数据不太了解,但是,如果这意味着 recyclerView 的数据然后如何使用 RecyclerView.State 对象来 恢复recyclerView里面的数据?

不,recyclerview 的状态是指recyclerview 的状态,比如它的垂直距离,查看相关数据等。列表/数据工厂不是由recyclerview 本身处理的,而是由Adapter 提供的。并且没有适配器的状态,这就是为什么您必须自己设法将数据加载到适配器中。

如果用户有 除了必需的 50 张照片之外,还有很多照片。

对于您的特定情况,您可以使用缓存目录来更快、更轻松地访问您的照片,您只需检查缓存中是否存在照片,如果不存在,则下载,否则从缓存中获取。 Official docs

我想这就是你想要的。但是,如果您还想记住上次滚动位置,可以通过将上次滚动位置存储到 SharedPreferences 或类似实用程序中来实现。然后加载数据后,您可以手动将recyclerview滚动到该位置。

大佬总结

以上是大佬教程为你收集整理的如何保存完整的回收者视图数据?全部内容,希望文章能够帮你解决如何保存完整的回收者视图数据?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。