5

基本的にタイトルが言うこと、

私のアプリケーションは主にViewPagerを使用するで構成されていますFragmentStatePagerAdapter

SurfaceViewsFragmentStatePagerAdapterに一連のシリーズを追加すると、問題が発生します。テストの目的で、SurfaceViewsをサブクラス化することはありませんでした。数ページをナビゲートし、「ホーム」を押してからアクティビティに戻ると、デバイス全体が1〜2秒間フリーズしてから、何かをレンダリングします。バックスタックからプルされた後、アプリが再開するのにかかる時間内に、アプリを数回起動して終了することができます。最初の画面描画が最終的に行われるまでにいくつかのAsyncTasksがほぼ終了しているため、アプリケーションが実行されていることを知っています。これらのAsyncTasksを削除しても効果がないため、これらのAsyncTasksが問題を引き起こさないことはわかっています。

SurfaceViewsを変更するとViews、問題は完全になくなります。

この問題は、実際のSurfaceViews(プロジェクトでネゴシエートできない)を使用した場合にも発生します。この問題は、複数のデバイスでも発生します。

この時点で、障害はViewPagerに正直にあると思いますが、そのインターフェイスコンポーネントが必要なため、どうしたらよいかわかりません。

どんな助けでも大歓迎です!

編集:

明確にするために、SurfaceViews / Viewsは、FragmentStatePagerAdapterに追加されたフラグメントのビューを表します。

4

2 に答える 2

5

将来のグーグルのための解決策を見つけました!

これが私がそれをした方法です:

私のフラグメントでは、onCreate()でmySurfaceViewをインスタンス化しました

次に、onCreateView()中にダミーレイアウト(LinearLayout)を実際のビューにアタッチしました

次に、onResume()で、removeAllViews()を使用してダミーのレイアウトをクリアしてから、addView(mySurfaceView)を呼び出しました。

これにより、ViewPagerがレイアウトをすばやく構築できるようになり、ユーザーが実際に何かを見る必要が生じる前に、SurfaceViewがポップインされます。

于 2012-07-06T09:26:33.827 に答える
0

私が見つけたより良い解決策は

  • オーバーライドgetItem()_FragmentPageAdapter
  • を返す場合は、Fragmentを使用して2秒の時間遅延を作成しますHandler

これで、フラグメントページアダプタが返そうとするたびSurfaceViewに、2秒程度待機します。そして、その間にサーフェスビューが開始されます。その下に表示されます

fragmentAdapter extends FragmentPageAdapter

..。

@Override
getItem(int position)

..。

if (position == 0)

>     final Handler handler = new Handler();
>     handler.postDelayed(new Runnable() {
>         @Override
>         public void run() {
>             // initiate SurfaceView
>             // return fragment after 5s
>         }
>     }, 5000);
于 2017-07-11T15:45:30.130 に答える