問題タブ [fragment-lifecycle]
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 - Android のタブのライフサイクル
TabLayout と ViewPager を使用して、マスター/詳細レイアウトの詳細ビューとして 5 つのタブを実装しています。
マスター ビューでアイテムをクリックすると、詳細ビューが作成され、必要なタブが作成されます。詳細ビューが作成されると、タブの onResume() メソッドが呼び出されます。マスター ビューに戻ると、詳細ビューのonPause() が呼び出されますが、タブの onPause() は呼び出されません。
これは、各タブの onResume() メソッドでイベントにサブスクライブするための問題ですが、各タブの onPause() で行われるはずのサブスクライブ解除は決して発生しません。
したがって、マスター ビューのアイテムを n 回クリックすると、サブスクリプションが n 回実行され、各イベントが n 回処理されます。
SOの回答で見つけたこのソリューションhttps://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-include-source-code/を試し ましたが、うまくいきませんでしたonFragmentPause() のフラグメントの ID (ID 0) が onFragmentResume() のフラグメントの ID と同じではなかったため (したがって、サブスクリプションは onFragmentPause() で null でした)。
アイテムがクリックされるたびにタブフラグメントが複製されないようにする方法、または onPause() メソッドを呼び出させる方法がわかりません。
android - Androidコードを変更して再び機能させるにはどうすればよいですか?
私は本を読んでいるアンドロイドの初心者です.今私は問題を抱えています.テストアプリはニュースアプリで、次のようなコードがあります:
しかし、新しいAndroid APIでは、コード
に変更する必要があります
変更したのですが、変更後は何も表示されません!なぜ私が間違っているのか、それを変更する方法を知りたいです。どうもありがとう。PSNewsAdapter クラスは ArrayAdapter を拡張します。News クラスには文字列が 2 つしかありません NewsAdapter メソッドは次のとおりです。
android - android - bottomnavigationview onSaveInstanceState を使用したフラグメント バックスタックが正しく呼び出されない
フラグメント onSaveInstanceState に問題があります。stackoverflow や他のサイトで検索しましたが、私の問題とまったく同じ問題は発生しませんでした。
私はボトムナビゲーションビューを持っています(それが重要な場合、これはAndroidサポートライブラリのボトムナビゲーションビューではありません)。下部のナビゲーション ビューには、4 つの異なるフラグメントを表す 4 つのボタンがあります。ホーム、検索、通知、プロフィール。
- HomeFragment を起動します (バックスタックに追加されます)
- NotificationsFragment に移動します (バックスタックに追加されます)
- SearchFragment に移動します (バックスタックに追加されます)
- NotificationsFragment に移動します (バックスタックからポップバックします): ただし、インスタンスの状態は保存されません。
これが私のフラグメントライフサイクルログです。Fragment:onSaveInstanceState() 関数にログインしましたが、呼び出されなかったため、インスタンス状態の保存が呼び出されません。
MainActivity2.java
BottomNavigationView フラグメントのサンプル フラグメントの 1 つ
NotificationsFragment.java
編集ホーム画面の画像を追加しました。
android - AppCompat フラグメントのライフサイクルが変更されました
新しい appcompat ライブラリcom.android.support:appcompat-v7:25.1.0
に更新した後、トランザクションでフラグメントを置き換えるときに、新しいフラグメント ライフサイクルを取得しました。
たとえば、2 つのフラグメントがFrFirst
ありFrSecond
、logs inonStart
およびonStop
があり、first を second に、次に second を first: に置き換えますFrFirst -> FrSecond -> FrFirst
。
以前の appcompat バージョンでは、次のログを読み取ることができます。
FrFirst: 2 番目に
移動 FrFirst: 停止
FrSecond: 開始FrSecond: 最初に
移動 FrSecond: 停止
FrFirst: 開始
25.1.0 では、次のログが記録されます。
FrFirst: 2 番目に
移動 FrSecond: 開始
FrFirst: 停止FrSecond: 最初にナビゲートする
FrFirst: 開始
FrSecond: 停止
ということで、現在onStart
のそれ以前に呼ばれる断片を提示するonStop
。
なぜメソッドの順序が変更されたのですか? サポート ライブラリのバグですか?
android - アクティビティ内の複数のフラグメントの状態を保存する
私はアプリケーションに取り組んでいますが、私を悩ませている特定のことが 1 つあります。1 つのアクティビティと 2 つの fragment.FragmentA と FragmentB があり、アクティビティの開始時に FragmentA がアタッチされるとしましょう。
向きが変わったときの断片データと断片状態を保存したいのですが、OnSavedInstanceState
メソッドを使って断片データを保存することに成功しました。ここで、フラグメントの状態をアクティビティに保存して、向きの変更が発生した場合にフラグメントになりたいと考えています (私の場合、FragmentA または FragmentB は、構成の変更が発生する前にどちらが表示されていたかによって異なります)。
これは、フラグメントの状態をActivityに保存する方法です。
そして、これは、方向の変更が発生したときにどのフラグメントにいたかを取得する方法です。
シナリオ 1: フラグメント A を使用していて、デバイスをローテーションすると、すべて正常に動作します。フラグメントと同様に、データをリストビューにロードするWebサービスがあるため、データが存在するかどうかを確認し、Webサービスを実行する必要はなく、今のところ機能しています
シナリオ 2: フラグメント B を使用していて、方向の変更が発生した場合、フラグメント B にあると想定されているため、すべて正常に機能します。[戻る] ボタンを押すと、フラグメント A が再度呼び出され、すべてのデータもサービスから取得されます。BackStackにあるはずで、データが保存されていたので、これは起こらないはずだと思います。では、ここで今何をすべきでしょうか?
シナリオ 3: FragmentB で、デバイスをローテーションすると、FragmentA の saveInstanceState 関数も呼び出されることに気付きました。なぜそうなのですか?FragmentB を FragmentA に置き換えていたのはどこですか?
いくつかの混乱:
いくつかの混乱についても話させてください.フラグメントとアクティビティのライフサイクルについて多くのことを検索して読んだことがありますが、誰かが私にそれをクリアしてくれるかもしれません. 私はアクティビティでそれを行う方法(状態を保存する方法)を知っているので、フラグメントでそれを行う方法(フラグメントビューの状態を保存する)も知っています変化(回転)?また、FragmentB を使用している場合、FragmentA はどうなりますか?