問題タブ [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.

0 投票する
4 に答える
8533 参照

android - FragmentStatePagerAdapter メモリ リーク (viewpager でネストされたフラグメント)

アダプタに「メモリ リーク」があります (引用は後で説明します)。現在、ネストされたフラグメントを使用してビューページャーをホストしています。

私のセットアップは次のとおり
です
。各 viewpager ページはフラグメント B をホストします。
3. Fragment B - imageview を含むフラグメント。

構成の変更が発生した場合を除いて、すべてがうまく機能しています。ヒープを監視すると、ローテーションが発生するたびに 100 kb ずつ増加するようです。手動でGCingしてもメモリは解放されません。

私が試したこと:
1. Fragment B を空のフラグメントに置き換えます。同じ問題が発生するため、問題の原因はイメージビューではありません。
2. フラグメント A と B の両方を削除し、アクティビティをローテーションします。メモリ リークは発生しないため、アクティビティではありません。
3. 向きを変える前に MAT を使用し、約 50 回回転させてヒープを上げました。MAT は、私のアダプター クラスである 1 つの主要な容疑者を示しています。次のように、オブザーバーの 7 MB の保持ヒープ (非常に小さな浅いヒープ) が表示されます。

フラグメント内でビューページャーを使用する理由:
1. setretaininstance(true) を設定して、アダプターの状態とビューページャーに関連するその他の変数を維持したい。
2. 構成の変更後、アダプターを再作成せずに、古いアダプターを使用してビューページャーに接続します。
3. 古いアダプターを再利用せず、構成の変更後に新しいアダプターを作成すると、メモリ リークはなくなります。
4.アクティビティを閉じて前のアクティビティに戻ると、メモリリークも消えます。

何か案は?助けていただければ幸いです。

ありがとう、JC

0 投票する
2 に答える
1418 参照

android - Android ViewPager 取得ビュー nullpointer 例外

FragmentStatePagerAdapterを使用して、フラグメントで埋めるsupport.v4 ViewPagerがあります。

ViewPager でのフラグメントの表示は期待どおりに機能しますが、問題はgetView()、FragmentActvitiy クラスで関数を呼び出すときにフラグメント ビューを取得することです。15 個のフラグメントすべてにアクセスして引数を取得するなどはできますが、フラグメントで getView() 関数を呼び出すと、3 番目のフラグメント getView() が であるため、 nullpointer 例外nullが発生します。

出力:

FragmentStatePageAdapter クラス コード:

フラグメント クラス コード:

FragmentActivity クラス コード:

多数の SO の質問/回答を読みましたが、何が問題なのかわかりません。

0 投票する
3 に答える
901 参照

android - スクロールバック時の ViewPager NullPointerException

各ページにフラグメントを含む水平 ViewPager (A と呼びましょう) があります。各フラグメントには垂直方向の ViewPager (B としましょう) があり、各ページには 1 つの画像を含むフラグメントが含まれています。Aを右にスクロールするとすべて正常に動作しますが、左にスクロールすると(viewpager Bが復元された瞬間だと思います)アプリがクラッシュし、これはlogcat情報です:

水平 ViewPager A:

ViewPager A と B は同じ FragmentStatePagerAdapter を使用します

ViewPager B:

最後に、ImageFragment

ご協力いただきありがとうございます。

0 投票する
2 に答える
6463 参照

android - ビューページャーで現在のフラグメントの背景画像を変更する

ビューページャーに 4 つのフラグメントがあります。そして、ビューページャーがあるアクティビティ内の FragmentStatePagerAdapter 。FragmentStatePagerAdapter の newInstance() メソッドはパラメーター レイアウト ID として受け取るため、各フラグメントには独自のレイアウトがあります。

FirstFragment は次のとおりです。

そして activity_main.xml:

および newInstance パラメーターの 1 つ fire_room_wall1.xml:

//他のいくつかの子ビュー

//他のいくつかの子ビュー

プログラムのある時点で、現在のフラグメントのレイアウトの背景画像を変更したいと考えています。そして、私は次のようにしようとしました:

しかし、行 " "は null で((BitmapDrawable)page.getView().getBackground()).getBitmap().recycle();あるため、NullPointerException を返します。page.getView().getBackground()私が間違っていること、または背景画像を変更するにはどうすればよいですか? PS 何らかの理由で page.getView() のタイプは NoSaveStateFrameLayout であり、予想される RelativeLayout ではありません

0 投票する
2 に答える
4699 参照

android - ViewPager に新しいアダプターを割り当てるとアプリがクラッシュする

アプリの起動時にaViewPagerによって入力される があります。FragmentStatePagerAdapter

これは正常に機能します。

ここで、ユーザーがアプリの設定を変更すると、次のように新しいアダプターを ViewPager に割り当てたいと思います。

残念ながら、updateObserverこの例外を呼び出した後、アプリがクラッシュします。

01-22 23:22:45.957: E/AndroidRuntime(13131): 致命的な例外: メイン 01-22 23:22:45.957: E/AndroidRuntime(13131): java.lang.IllegalStateException: キー f0 のフラグメントが存在しなくなりました:インデックス 0 01-22 23:22:45.957: E/AndroidRuntime(13131): android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:575) 01-22 23:22:45.957: E/AndroidRuntime( 13131): android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) 01-22 23:22:45.957: E/AndroidRuntime(13131): android.support.v4.view.ViewPager.onRestoreInstanceState で(ViewPager.java:1281) 01-22 23:22:45.957: E/AndroidRuntime(13131): android.view.View.dispatchRestoreInstanceState(View.java:13188) 01-22 23:22:45.957: E/AndroidRuntime (13131): android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2850) 01-22 23:22:45.957: E/AndroidRuntime(13131): android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2856) 01-22 23:22:45.957: E/AndroidRuntime(13131): でandroid.view.View.restoreHierarchyState(View.java:13166) 01-22 23:22:45.957: E/AndroidRuntime(13131): android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) で。 ..

ViewPagerアプリをクラッシュさせずに新しいアダプタを に割り当てるにはどうすればよいですか?

0 投票する
1 に答える
279 参照

android - アプリがバックグラウンドまたはプロセスが停止している場合、ホーム画面のような横スクロール ページでグリッド ビューが形成されない

水平スクロールのページタブを開発しています

私のアプリはフォアグラウンドのすべてのデバイスで正常に動作していますが、バックグラウンドに移行すると、1 時間後に Process com.example.myapp has deadというログが記録されます。アプリを再度開くと、グリッドビューのデータは表示されませんが、水平方向にスクロールすると、画像やテキストなどのすべてのデータを表示する getView() メソッドが表示されます。

つまり、アプリにはデータがありますが、プロセスが停止したときにビューが形成されません。そして、戻るボタンを押してアプリを再度開くと、うまく機能しています

私のMainActivity.javaはここにあります

私の HomeFragmentTab.java は

そして HomeFragment.java は