問題タブ [fragmentstatepageradapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - FragmentPagerAdapter と FragmentStatePagerAdapter
私は現在、PagerAdapter のどの実装を使用すべきかを考えています。私はそれらの両方に関連するジレンマを持っています。これらが何であるかをお見せしましょう。
1# FragmentPagerAdapter
正常に動作します。以前のインスタンスが利用できない場合はフラグメントの新しいインスタンスを作成し、そのような機会がある場合は以前のフラグメントを取得します。
私は最近 StackOverflow で、メソッドPagerAdapter's
getItem()
method はフラグメントを作成する必要がある場合にのみ呼び出されることを読みましたが、何度も呼び出され、このメソッドの本体内で新しいインスタンスの作成と古いインスタンスの取得を処理する必要がありました。
BUT - コールバック メソッドとライフサイクル メソッドはほとんど呼び出されません。たとえば、私はonSaveInstanceState
呼ばれることができません。したがって、フラグメントの状態を保存する方法はありません-もちろんSharedPreferences
、または他の何かを使用できますが、コールバックメソッドを使用したかったのです。それを達成する方法はありますか?
2# FragmentStatePagerAdapter
完全に機能し、ViewPager
保持するすべてのフラグメントの状態を保存します。
しかし - これPagerAdapter
は常に新しいフラグメントを作成します。コンストラクタ内で確認しました。
非効率じゃないですか?Romain Guy が Google I/O の資料で、新しいものを作成するのは効率的ではないと言っているのをViews
見たことがありViews
ます。したがって、ページ間の切り替えは非常に似ています-多くは新しい-フラグメントはある種のListView
convertView
View
Views
View
どちらもOverriding メソッドPagerAdapters
でトリックを試みdestroyItem()
ましたが、まったく機能しませんでした。
そして、これが私の質問です。
私は何をすべきか?
SharedPreferences
オプション #1を使用するFragmentPagerAdapter
か、オプション #2を使用する必要がありますFragmentStatePagerAdapter
か?
これらのアダプター内で何か間違ったことをして、期待どおりに動作しない可能性はありますか?
以下は、「読み取り可能な」部分に分割された私のコードです
PagerAdapter パート 1:
PagerAdapter パート 2:
PagerAdapter パート 3:
ViewPager コード:
android - FragmentStatePagerAdapter からの getResources
アクティビティ クラス内に、このクラスがあります (Android サンプルから):
これを変更したいと思います: return "Title n°" + (position + 1); へ: getActivity().getResources().getString(R.string.questionTabTitle) + (位置 + 1); を返します。
しかし、活動は未定義です。必要な文字列リソースを取得するにはどうすればよいですか?
android - Android: 最初の ViewPager を除くすべてが非表示
XML を拡張して、View Pagers をアプリに動的に追加しようとしています。すべてのビュー ページャーと対応するアダプターが正しくインスタンス化され、必要なフラグメントもアタッチされます。ただし、最初のビュー ページャーのフラグメントのみが表示されます。他のビュー ページャーについては、あるフラグメントから次のフラグメントにスワイプすることもできます。それらは目に見えないだけです。
TestFragment の onCreateView および onAttach メソッド
および TestFragmentPagerAdapter の getItem メソッド
これはビューページャーのレイアウトです
最後にログです。2 番目のビュー ページャーをスワイプすると、1 番目のビュー ページャーと同じように新しいフラグメントが追加されることがわかります。すべてのページャーとアダプターの変数の状態もチェックしましたが、最初のページャーが他のページャーとどう違うのかわかりません。
上記のログは 2 つのビュー ページャーの場合のみですが、アダプターの数に関係なく結果は同じです。
すべてのビュー ページャーを膨張させるのではなく直接 XML に追加すると、それらはすべて問題なく表示されます。
編集
スクリーンショットを投稿するほどの評判はありませんので、以下のように表示されます。前述したように、最初のビュー ページャーのフラグメントが表示されます。ただし、以下に示すように、正しく接続されているにもかかわらず、2 番目のビュー ページャーには表示されず、スワイプできます。
android - フラグメントアクティビティの例外androidクラスが見つかりません
ジンジャーブレッド OS で動作するフラグメント アクティビティに取り組んでいます。ジンジャーブレッド エミュレーターでアプリケーションを実行しようとすると、ClassNotFound
エラーが原因でアプリケーションが強制的に閉じられます。主なフラグメント アクティビティ コードを以下に示します
助けの平和はかなりのものです。
そして、マニフェストは次のようになります
logcatは
フラグメント アクティビティの Xml レイアウト ファイルは次のとおりです。
よろしくお願いします
android - ViewPager が常に位置 0 で Fragment をインスタンス化するのを防ぎますか?
私は and を使用してFragmentStatePagerAdapter
おりViewPager
、デフォルトの開始ページは 0 です。任意のページ、たとえば 5 から開始したいと考えています。これが ViewPager の表示方法です。
ただし、ViewPager は最初にデフォルトの位置 (0) で作成され、次に目的の位置 (5) に切り替えられます。したがって、フラグメントは次の順序で作成されます: 0、1、4、5、6。
0 と 1 のフラグメントをまったく作成したくありません。どうすればこれを達成できますか?
android - ローテーション後、フラグメント トランザクションで IllegalStateException が発生する
Fragments と BroadcastManager に問題があります。私のアプリケーションでは、1 つのメイン アクティビティに切り替えて、新しい NavigationDrawer を使用します。すべてのコンテンツはフラグメントに含まれています。
1 つのフラグメント (ユーザーの検索) には、Android Design Web サイトのナビゲーション パターン「Lateral Navigation」を使用する 2 つのタブ (名前で検索、条件で検索) が含まれています。
両方のタブで同じアクション バー (オプション) メニューを使用したい: 検索アクション。ただし、アクティブなフラグメントのみがそれに反応する必要があります。
私はさまざまなアプローチを試しましたが、最も厄介なのは、現在のフラグメントをビューページャーから直接 (API 以外の実装の詳細に依存せずに) 簡単に取得できないことでした。
アプローチ
LocalBroadcast を使用して、検索がクリックされたことをフラグメントに通知します。各フラグメントは、onResume に小さな Wrapper-Receiver を登録し (そして onPause で削除し)、onReceive をフラグメント自体に転送します (以下に示す方法)。setMenuVisibility
FragmentStatePagerAdpater がフラグメントに対して呼び出すコールバックをオーバーライドして、アクティブなフラグメントを認識します。メニュー セットが表示されているフラグメントのみがブロードキャストに反応します。
どちらのフラグメントもフラグメント トランザクションをトリガーして、検索結果を表示し、バック スタックに追加します。
問題 フラグメント トランザクションは一般的に機能しますが、デバイスをローテーションしてから検索を押すと、IllegalStateException が発生します (onSaveInstanceState の後でコミットできません)。
コミットを に変更しようとしましたcommitAllowingStateLoss
が、「アクティビティが破棄されました」という IllegalStateException が発生します。
ここで何がうまくいかないか知っていますか?どうしようか迷ってます…
追加コード:
MainActivities onCreate (NavigationDrawer サンプルに基づく) および selectItem
誤動作しているタブ付きフラグメントの FragmentStatePagerAdapter:
必要不可欠なものだけを含むプロジェクトの簡略版は、https://docs.google.com/file/d/0ByjUMh5UybW7cnB4a0NQeUlYM0E/edit?usp=sharingに投稿されています。
次のように再現します。起動すると、2 つのタブが表示されます。どちらかを選択し、ActionBar の Search をクリックします -> Fragment transaction works。戻るキーを使用し、デバイスを回転させて繰り返します -> クラッシュ! [報奨金が終了した後、またはエラーが特定された後、ファイルにアクセスできない場合があります。]
編集:(1)onReceiveがフラグメントのコンテキストに存在することを明確化(2)メインアクティビティのコードを追加
android-viewpager - ネストされたフラグメント + FragmentStatePagerAdapter
FragmentStatePagerAdapter (フラグメントを動的に追加するため) を使用して View-Pager で Fragment(親フラグメント) を使用しようとしています。ビュー ページャー フラグメント (ネストされたフラグメント) で you-tube ビデオをクリックすると、親フラグメントは、対応する you-tube ビデオを再生する別のフラグメントに置き換えられます。
2 つのフラグメント (view-pager を含むフラグメントと you-tube player を含むフラグメント) の間を行き来できます。しかし、前後に移動した後、stackoverflowエラーが原因でアプリがクラッシュします
さまざまなブログを検索してスタック オーバーフローに投稿した後、ネストされたフラグメントがバック スタックからポップされていないことがわかりました。私はすでに次のような解決策を試しました-
ここで、fragment はビューページャーを含むフラグメントですが、アプリは引き続きクラッシュします。
以下は私のクラッシュレポートと関連コードです
クラッシュレポート-
07-05 16:49:24.033: E/ACRA(32192): org.pckg.name 致命的なエラー: null 07-05 16:49:24.033: E/ACRA(32192): java.lang.StackOverflowError 07-05 16 :49:24.033: E/ACRA(32192): android.text.TextLine.handleText(TextLine.java:747) 07-05 16:49:24.033: E/ACRA(32192): android.text.TextLine で。 handleRun(TextLine.java:898) 07-05 16:49:24.033: E/ACRA(32192): android.text.TextLine.measureRun(TextLine.java:414) 07-05 16:49:24.033: E/ ACRA (32192): android.text.TextLine.measure(TextLine.java:293) 07-05 16:49:24.033: E/ACRA(32192): android.text.TextLine.metrics(TextLine.java:267) ) 07-05 16:49:24.033: E/ACRA(32192): android.text.Layout.getLineExtent(Layout.java:977) 07-05 16:49:24.033: E/ACRA(32192): android .text.Layout.drawText(Layout.java:329) 07-05 16:49:24.033: E/ACRA(32192): android.text.Layout.draw(Layout.java:205) 07-05 16:49 :24.033:E/ACRA(32192): android.text.BoringLayout.draw(BoringLayout.java:400) 07-05 16:49:24.033: E/ACRA(32192): android.widget.TextView.onDraw(TextView.java) :5030) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13712) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16 :49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup で。 drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ ACRA (32192): android.view.View.getDisplayList (View.java:12648) 07-05 16:49:24.033: E/ACRA (32192): android.view.View.getDisplayList (View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): でandroid.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16: 49:24.033: E/ACRA(32192): android.widget.AbsListView.dispatchDraw(AbsListView.java:2327) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw で(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): android.widget.AbsListView.draw(AbsListView.java:3653) 07-05 16:49:24.033: E/ACRA (32192): android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) で07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): アンドロイドで。見る。ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java) :12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): android.support.v4 で。 view.ViewPager.draw(ViewPager.java:2153) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw で(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) で07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): アンドロイドで。 view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49: 24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View で。getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ ACRA (32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) で) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): Android で.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49 で:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild( ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033:E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java) :12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): android.widget.FrameLayout で。描画 (FrameLayout.java:467) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ ACRA(32192): Android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): Android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): でandroid.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) 07-05 16: 49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.draw で(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) でandroid.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View で。描画 (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA (32192): android.view.ViewGroup.dispatchDraw (ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA (32192): android.view.View.getDisplayList (View.java:12648) で)android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): android.view.View で。描画 (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA (32192): android.view.ViewGroup.dispatchDraw (ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA (32192): android.view.View.getDisplayList (View.java:12648) で)E/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java) :2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) でE/ACRA(32192): android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.drawChild(ViewGroup.java) :2928) 07-05 16:49:24.033: E/ACRA(32192): android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): android.view.View.getDisplayList(View.java:12648) で
コード- 親フラグメントの onCreate() メソッド -
viewpager フラグメント onItemClick() コード-