6

アクティビティと 3 つのスワイプ可能なタブ (フラグメント) を持つアプリケーションがあります。タブ内に作成に時間がかかる大量の UI 要素があり、最初の実行では問題ありませんが、スワイプするたびにビューが再作成されます。

タブを選択すると、他のタブが onStop() を呼び出し、前のタブを再度選択すると、onCreateView() が再度呼び出され、ビューが再作成され、速度が低下し、UI スレッドがブロックされます。

タブ内にフラグメントを1回作成し、他のタブ間をスワイプするときにビューを再作成しないようにする正しい方法は何ですか?

4

3 に答える 3

2

タブ内に大量に作成された UI 要素がいくつかあり、作成に時間がかかります

「しばらく」が 5 ミリ秒を超える場合、アプリは壊れており、修正する必要があります。Traceview を使用して時間を費やしている場所を正確に特定し、問題を修復して、メイン アプリケーション スレッドでかかる時間を短縮します。

タブ内にフラグメントを1回作成し、他のタブ間を移動するときにビューを再作成しないようにする正しい方法は何ですか?

私の知る限り、FragmentPagerAdapterあなたが説明している効果はありません(ただしFragmentStatePagerAdapter)。onCreateView()ただし、パフォーマンスの問題を修正してもFragmentStatePagerAdapter、問題は投稿されません。

于 2013-06-03T13:54:58.043 に答える
0

TabAdapter が宣言されているメイン Fragment/Activity クラス内に次のコードを追加するだけです。

viewPager.setOffscreenPageLimit(tabLayout.getTabCount());

次のような tabLayout と viewPager

TabLayout tabLayout = (TabLayout) root.findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) root.findViewById(R.id.pager);
于 2015-12-28T18:33:01.603 に答える