問題タブ [fragmenttransaction]

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 投票する
34 に答える
372230 参照

android - IllegalStateException: ViewPager で onSaveInstanceState の後にこのアクションを実行できません

市場でアプリからユーザー レポートを取得していますが、次の例外が表示されます。

どうやら、私が使用していない FragmentManager と関係があるようです。スタックトレースには自分のクラスが表示されないため、この例外がどこで発生し、それを防ぐ方法がわかりません。

記録のために:私はタブホストを持っており、各タブにはActivityを切り替えるActivityGroupがあります。

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

android - 親アクティビティの状態を保存する必要がある場合、フラグメント トランザクションをどのように処理しますか?

私のアプリには、いくつかのフラグメントとアクティビティがあります。メインの親アクティビティのライフサイクルの過程で、アプリは他のアクティビティでユーザーに情報/オプションを提示します。

Fragments のドキュメントには、commit() に関する次の規定があります。

注意: commit() を使用してトランザクションをコミットできるのは、アクティビティがその状態を保存する前 (ユーザーがアクティビティを離れたとき) のみです。それ以降にコミットしようとすると、例外がスローされます。これは、アクティビティを復元する必要がある場合、コミット後の状態が失われる可能性があるためです。コミットを失っても構わない状況では、commitAllowingStateLoss() を使用します。

問題は、親アクティビティに戻った後、アプリでナビゲーションを設計した方法に不可欠な FragmentTransactions を使用できなくなることです。

私が考えた 1 つの解決策は、アクティビティをフラグメントに変更することですが、私のアプリは最終的にアプリ内課金も使用し、常に独自のアクティビティを開始すると考えています。これは大きな制限のように思えます。開発のある時点で、別のアクティビティを表示しなければならなくなるでしょう。

commitAllowingStateLoss() を使用することでおそらく回避できますが、Android タブレット アプリ開発の主要な概念が欠けているように感じます。FragmentTransactions をコミットする機能を失うことなく、アクティビティを開始してから親アクティビティ (フラグメントを管理する) に戻る方法はありますか?

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

android - フラグメント内のViewPagerは、transaction.remove()の後に消えます(インスタンスを維持しますか?)

v4パッケージでGoogleAPI8(Android 2.2)を使用しています。

こんにちは、ここに私の問題があります:

常に画面に表示されるメニューと、多くのフラグメントを配置する小さなコンテナー(FrameLayout)を持つFragmentActivityがあります。フラグメントを非表示にして表示しているときはアプリケーションは正常に動作しますが、使用するメモリが限られているため、すべてのフラグメントをロードするとクラッシュします。この場合、他のフラグメントをロードするときにいくつかのフラグメントを削除する必要があったため、アプリケーションはクラッシュしません。しかし、ここで別の問題が発生します。ページャーを削除してもページャーがリロードされず、他のすべてのフラグメントは正常に機能します。ポケットベルだけが表示されず、クラッシュせず、消えるだけです。ここに私の問題が何であるかについての手がかりを与えるためにいくつかのコードがあります:

MyFragmentActivity.javaのレイアウトは次のとおりです。

そのFrameLayoutに、すべてのフラグメントを配置します。ページャーフラグメントはその1つであり、そのレイアウトは次のようになります。

そして、私はこの抽象クラスAbstractPagerFragmentを実装しました:

これは、次のような私のPagerAdapterを使用します。

それでは、AbstractPagerFragmentを実装しましょう。

さて、これでコンテンツ(FrameLayout)から次のように追加します(myFragmentはPagerFragmentであり、myTagは私が定義したタグを表す文字列です):

そして、これは私がそれを削除する方法です:

しかし、メニューのフラグメントに戻った後、最初に使用したのと同じ方法(上記のコード)を使用して再度ロードする必要がある場合、ページャーは表示されなくなります。誰かがこれを解決できますか?

このすべてを読んだら、ありがとう、あなたはチャンピオンです。

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

android - FragmentTransactionは何もしていません

私はフラグメントを学習しています。以下に私の最初のフラグメントプログラムを示します。2つの画面がある単純なプロジェクト。最初の画面の次のボタンをクリックすると、2番目のボタンが表示される必要があります。

ここに画像の説明を入力してください

Android 2.1以降をターゲットにしており、互換性パッケージを使用しています

AppMainFragmentActivity.java

app_main_layout.xml

FirstFragment.java

first_fragment_layout.xml

SecondFragment.java

second_fragment_layout.xml

さて、私は最初の画面を大丈夫にしています。今、

フラグメントの理解から期待したこと

  • 画面1の[次へ]ボタンをクリックすると、SecondFragmentが作成され、それonCreate()onCreateView()呼び出されます。
  • SecondFragmentが表示され、FirstFragmentが破棄されます(バックスタックに追加していないため)。デフォルトのフラグメントトランザクションにはアニメーションがないため、アニメーションはありません。

何が起こっている

  • SecondFragmentは問題なく作成されてonCreate()おり、onCreateView()呼び出されます。
  • ただし、FirstFragmentは画面に残り、2番目のFragmentは表示されません。

今、フラグメントの私の理解は間違っている可能性があります。しかし、フラグメントトランザクションをcommit()するときは、最初のフラグメントを2番目のフラグメントに置き換える必要があると思います(最初のフラグメントは非表示になるか破棄されます)。まあ何も起こっていないようです。何故ですか?最初のフラグメントを手動で破棄/非表示にする必要がありますか?

注:私はそれがそのような基本的なことのための長い質問であることを知っています。しかし、どこでコードをめちゃくちゃにしたのかわからないので、コード全体を入れました。

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

android - プログラムで追加されたフラグメントの戻るキーは、空のコンテナにつながります

レイアウトの断片化に問題があります。以前に回答されたことがあり、愚かすぎて見つけられなかった場合は、心からお詫び申し上げます。私は何時間も検索して何も得られませんでした(まあ、私はたくさん得ましたが、何も私の問題を解決しませんでした)。

これが私の設定です。フラグメントのコンテナとして2つのFrameLayoutを使用する2つのペインのレイアウトがあります。activity_listing.xml:

アプリを開くと(フラグメントのアクティビティでonCreate)、FragmentTransactionを使用してプログラムでListingというフラグメントがFrameLayoutの「リスト」に追加されます。

このListingFragmentは実行時に数回置き換えられるため、XMLで定義するのではなく、作成する必要があります。私は後者を試してみました

ただし、後でプログラムで置き換えたり削除したりすることはありません。add()しかできないので、古いものが新しいものを通して見えます。しかし、それはここでは問題ではありません-私のやり方の説明にすぎません。

これまでのところ、これはすべて正常に機能し、リストが作成および表示されるなど、問題はありません。だが:

起動時にListingFragmentが表示され、戻るキーを押すと、最後の位置で、ホーム画面に戻る代わりに、FrameLayoutの「リスト」が空になります。私のListingActivityのonCreateが空のフレームを表示し、それにListingFragmentを追加するためである必要があると考えました。したがって、バックスタックにも空のフレームがあります。右?

私はこれによってListingActivityに状況を解決しようとしました:

しかし、どういうわけかそれは正しく見えないか、感じられません...それは悪い回避策のように見えます。

それで、空のFrameLayoutを持つビューが膨らむ前にフラグメントを挿入して、「戻る」ための空の状態がないようにする方法はありますか?または、バックスタックにない場合でも、バックスタックから「空の」状態を削除することは可能ですか?「戻る」を押した後に空のフレームを回避する方法に関する他のアイデアはありますか?

よろしくお願いします!

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

android - 画面の向きを変更した後、誤って置き換えられたフラグメント ビュー

アプリには、親と一致するフレームレイアウト コンテナーを持つフラグメント アクティビティがあります。ユーザーはフラグメント ui とやり取りし、互いに置き換えて、次のように古いものをバックスタックに入れます: A -> B -> C -> D -> E -> F

たとえば、フラグメント D でユーザーが電話の向きを変更し、フラグメント E に移動したい場合、フラグメント A のビューが表示され、ユーザーがこのフラグメント A (通常はフラグメント B に移動) で何かを押すと、フラグメント F のビューが表示されます。示します。

画面の向きを変更した後、AではなくフラグメントEを表示する方法は?

アプリは最新の Android サポート ライブラリを使用しており、これは Android 4.1 エミュレーターと Android 2.3 電話で発生します (他の Android バージョンはテストされていません)。

すべてのフラグメントには、この go next fragment メソッドがあります。

編集

フラグメント D で画面を回転すると、すべての回転が正常に行われ、フラグメント D のビューが表示されます。ユーザーが上記の方法を使用してフラグメント E に移動すると、回転後にフラグメント A のビューが E ではなく表示されるという問題があります。ユーザーが電話フラグメント E を回転しない場合、フラグメント E が表示されます通常は。

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

android - listitemをクリックしたときにフラグメントトランザクションを行う方法は?

これらの各タブにそれぞれ割り当てられたフラグメントである ActionBar (4 つのタブを含む) を含むアクティビティがあります。これらのフラグメントでは、文字列値で満たされたいくつかの ListAdapter を割り当て、さらに操作したいクリック可能にしました。アイテムをクリックすると、そのアプリがそのフラグメントから別のフラグメントに送信されます。私は FragmentManager() と FragmentTransaction() を使用しなければならないことを知っていますが、私は Android 開発に慣れていないので、あらゆる種類の助けを求めています。

タブの 1 つのスニペット コード (UserFragment.java) は次のとおりです。

Profile.java アクティビティ コード:

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

android - EclipseでのActionBarSherlocksのデモの読み込み中にエラーが発生しました

ActionBarSherlockにデモを読み込もうとしましたが、を使用してそのアクティビティでエラーが発生しますFragmentTransaction。活動はとFeatureTogglesですTabNavigation。を使用してTabNavigationCollapsed拡張しているため、エラーも発生します。TabNavigationFragmentTransaction

エラーは次のとおりです。

私のエラーは何でしょうか?私のプロジェクトビルドターゲットはAndroid4.0です。

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

android - 同じフラグメントを頻繁に追加および削除する方法

私のアプリケーションは通常、同じフラグメントを何度も追加してから削除します。以下は私がこれを行う方法です:

Add fragment

Remove fragment

問題は、そのフラグメント (HomeFragment) を含むアクティビティから別のアクティビティに移動すると、アプリがクラッシュすることがあるということです。私は理由を理解しようとしましたが、それでも方法はありません。このエラーは頻繁には発生しないため、ここには完全なエラー ログはありませんが、エラーは次のように同じですhttps://android.googlesource.com/platform/frameworks/support/+/5506618c80a292ac275d8b0c1046b446c7f58836%5E!/ :

誰かが私のコードに問題があるか、このエラーを修正する方法を知っていますか?助けてください。よろしくお願いします。

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

android - Androidフラグメントを別のコンテナに移動するフラグメントのコンテナIDを変更できません

これが、私のアプリケーションがタブレットでやりたいことです。フラグメント (0) には、フラグメント (1)...(n) を次のように表示するメニューがあります。

Fragment0 は移動せず、他のものは右にシフトされます。端から右に出る破片は破壊されます。

そこで、水平 LinearLayout を使用して XML レイアウトをセットアップし、適切な ID (fragment0... fragment3) を持つ 4 つの FrameLayout を含めます。

Fragment0 と Fragment1 をインスタンス化して表示することはできますが、次のように右にシフトすることはできません。

私が見つけた唯一の関連する質問はthis onethat oneで、提供されているさまざまなソリューションをすべて試してみましたが、運がありませんでした。

FragmentTransaction.remove()に続いて.add()、試して.replace()、それらをさまざまな順序で試し、途中でコミットし(誰かが提案したように2回コミットしようとしても)、呼び出しを試みましたaddToBackStack()...まだ運がありません。

問題は、FragmentTransaction を使用してこのようにフラグメントを移動できるかどうかです。はいの場合、私は何を間違っていますか (おまけに、それをアニメーション化することは可能ですか?)。いいえの場合、これを実装する適切な方法は何ですか?

毎回フラグメントを再インスタンス化したくないことに注意してください (それぞれが Web 上でいくつかのクエリを実行するため、時間がかかる場合があります)。すべてのデータをアクティビティに抽出して再作成することは可能ですが、可能であればそれを行いたくありません...