首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ViewPager 載入大量 Fragment:改用 FragmentStatePagerAdapter 並以列表管理

     編輯:程式設計綜合問答

FragmentPagerAdapter 會保留所有 Fragment 實例,導致記憶體壓力大。改用 FragmentStatePagerAdapter 自動銷毀不在視野的 Fragment,並以 List<Fragment> 管理。

優化適配器

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    private final List fragments = new ArrayList<>();

    public MyPagerAdapter(FragmentManager fm) { super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); }

    public void addFragment(Fragment f) { fragments.add(f); }

    @Override public Fragment getItem(int position) { return fragments.get(position); }
    @Override public int getCount() { return fragments.size(); }
}

使用方式

MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new Fragment1());
adapter.addFragment(new Fragment2());
// ... 加入 20 個 Fragment
viewPager.setAdapter(adapter);

優點

  • FragmentStatePagerAdapter 僅保留當前及鄰近 Fragment,其餘銷毀並儲存狀態。
  • 列表管理取代 switch-case,程式碼簡潔易擴充。
  • 支援動態增減 Fragment。

注意

Fragment 內需正確實作 onSaveInstanceState 保存狀態,銷毀後重建時自動恢復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved