0

我已经实现了 Leanback 库中的 BrowseSupportFragment。它有一个带有 rowItems 和 headerIcons 的左侧导航栏。每次我从导航抽屉中的一行移动时,都会重新加载片段。这不好,因为它不断进行服务器调用,因此我的图像缓存不起作用。这就是我在 BrowseSupportFragment 中调用每个片段的方式,使用与此处相同的想法: https ://www.javatips.net/api/platform_frameworks_support-master/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java

   private static class PageRowFragmentFactory extends BrowseSupportFragment.FragmentFactory {

        private final BackgroundManager mBackgroundManager;

        PageRowFragmentFactory(BackgroundManager backgroundManager) {
            this.mBackgroundManager = backgroundManager;
        }

        // new fragment is registered and called from here
        @Override
        public Fragment createFragment(Object rowObj) {
            Row row = (Row) rowObj;
            mBackgroundManager.setDrawable(null);
            if (row.getHeaderItem().getId() == HEADER_ID_1) {
                return new MovieGalleryFragment();
            } else if (row.getHeaderItem().getId() == HEADER_ID_2) {
                return  new SeriesGalleryFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_3) {
                return new SortByGenreFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_4) {
                return new SortByCountryFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_5) {
                return new WebViewFragment();
            }
            throw new
                    IllegalArgumentException(String.format("Invalid row %s", rowObj));
        }

    }

 public static class PageFragmentAdapterImpl extends MainFragmentAdapter<MovieGalleryFragment> {

        public PageFragmentAdapterImpl(MovieGalleryFragment fragment) {
            super(fragment);
        }
    }


在我的片段中我扩展

public class MovieGalleryFragment extends VerticalGridSupportFragment implements BrowseSupportFragment.MainFragmentAdapterProvider{

final MainActivityFragment.PageFragmentAdapterImpl mMainFragmentAdapter = new MainActivityFragment.PageFragmentAdapterImpl(this);

  
        
..........       
 }

所以当我从 MovieGalleryFragment() 移动到 SeriesGalleryFragment 并返回到 MovieGalleryFragment() 时,它会重新加载并从服务器调用图像。我该如何防止这种情况?

谢谢你。

4

1 回答 1

1

您的图像缓存不应存在于这些片段之一中,因此被销毁和重新创建的片段不应导致另一个提取。例如,MovieGalleryFragment 应在尝试从服务器获取图像之前从应用程序范围的缓存中请求图像。由于您要维护内存中缓存、磁盘缓存和清理规则,因此正确执行此操作可能非常复杂。我建议您使用 Picasso、Coil、Glide 等。一般而言,无论如何,您都希望以这种方式严重依赖缓存,因为用户可能会关闭应用程序并在不久之后重新打开它。

于 2020-11-24T23:38:52.163 回答