問題タブ [android-savedstate]

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

android - ロードされたlistViewの状態をフラグメントに保存するには?

私は1つのアクティビティ、listViewを含むフラグメント、および各listViewアイテムの詳細を含むフラグメントを持っています。API からフラグメント データを取得しています。listViewに戻ったときに復元できるようにするには、ロードされた日付とlistViewの位置を正しく保存するにはどうすればよいですか? このソリューションを実装しようとしましたが、フラグメントのインスタンス状態をバックスタックに正しく保存するにはどうすればよいですか? しかし、listView を正しく復元できません。

私のメインアクティビティ

およびListFragment

現在、savedInstanceState は常に null ですが、何が欠けていますか?

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

android - SavedInstanceState は null ではありませんが、空です

ユーザーがViewPagerさまざまな入力を入力するフラグメントがいくつかあります。これらのフラグメントの 1 つに aDatePickerと aTimePickerが含まれており、(ユーザーが日付と時刻を選択したときに) JodaLocalDateととして保存しますLocalTime

ユーザーがフラグメント間をスワイプしていても、その入力を維持するために、日付と時刻を保存したいと思います。これが私のコードです:

そして私の中でonCreateView

私が直面している問題は、ユーザーがこのフラグメントに到達しても入力を入力せずに、前のフラグメントに戻って日付と時刻のフラグメントを選択すると、アプリが私のLog行でクラッシュすることonCreateViewです.

selectedDate と selectedTime が null の場合にデータを保存しないようにしようとすると、フラグメントが再作成されるときにバンドルが null とは異なる理由がわかりません (もちろん、キーと値のペアは存在しません)。

これを解決する方法についてのアプローチを教えてもらえますか?この動作の説明をいただければ幸いです。

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

java - 子タスクから戻った後にバックグラウンド タスクを実行するとエラーが発生する

子アクティビティから戻った後にデータを取得するために何をする必要があるかを完全に理解しているかどうかはわかりません。親アクティビティにデータを渡す必要はありません。私はこれを参照用に使用しました.onPauseとonResume、および可能な解決策について言及していますが、onSaveInstanceStateとonRestoreInstanceStateの代わりに保存された設定を使用する必要がありますか? ブール値をチェックするバックグラウンド タスクで失敗します。また、これをさらに支援するために使用しました。

以下のコード:

編集:コードに詳細情報を追加

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

android - アクティビティに savedInstanceState バンドルを設定する

savedInstanceState Bundle を手動で設定する方法はありますか?

onCreate で savedInstanceState バンドルが null にならない、savedInstanceState モードでアクティビティを開始する必要があります。私のポイントは、カスタム データを使用してアクティビティを復元することです。ありがとう

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

android - インスタンスを Android フラグメントに保存

HomeFragment.java という Fragment があります。これは、アプリを開いたときに起動される最初のフラグメントです。このフラグメント内には、JSON を使用してサーバーからすべてのデータを取得する「onAsyncTaskDoInBackground」というメソッドがあります。

私がやろうとしているのは、「savedInstanceState」を使用して、「HomeFragment.java」が再度開かれるたびにすべてのデータを再ダウンロードしないようにすることです。

例:

ユーザーがアプリを開くと Homefragment.java が起動し、すべてのデータがダウンロードされます。ユーザーは about us ページに移動し、ホームページ (Homefragment、java) に戻り、すべてのデータが再度ダウンロードされます。(同じアプリの起動ですべてのデータを再ダウンロードする必要はありません)

HomeFragment.java

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

android - 動的に追加されたフラグメントの RecyclerView にカスタム ビューの状態を保存する方法は?

TL;DR:が をリサイクルしているときと を交換しているときRecyclerViewの の呼び出しを区別できません。onBindViewHolderViewFragment

ここSOで答えを探すのに多くの時間を費やしましたが、結局何もうまくいきませんでした。それがしたことは、答えはおそらく を使用することにあると教えてくれましたが、savedInstanceStateうまく使用できませんでした。

構造 :

  • メインフラグメント
    • メインビュー
    • SwitchFragmentButton

MainViewは がありFrameLayout、 を保持するために使用されますFragment

最初のFragmentものは重要ではありませんが、2 番目Fragmentのものは でありOverviewFragment、その構造は次のとおりです。

  • 概要フラグメント
    • RecyclerView
      • CustomItemView
        • テキストビュー
        • ChangeTextColorButton
        • アイテムの削除ボタン
        • ...
    • AddItemButton

RecyclerViewリストを水平にする必要があり、それが最も簡単な方法であるため、を使用しています。

望ましい動作:

ボタンを2回クリックしたとき(フラグメントを変更して元に戻すとき)に色の変更を保持したいのですが、リストからアイテムを削除してから再度追加したときは保持しません。

問題 :

色は常に保持されるか、まったく保持されません。onBindViewHolderのアダプターでテキストの色を設定するために使用RecyclerViewすると、バインドがフラグメントの置換 (変更された色を復元する場所) によるものか、ビューのリサイクル (復元しない場所) によるものかを区別できません。

コード :

SwitchFragmentButtonのメソッドOnClickListenerを呼び出しますMainView

色の管理方法は次のとおりです(簡略化):

RecyclerViewAdapter定義は次のとおりです。

MyItemここに CustomItemView のコア項目があります (すべての MyItem にはその CustomItemView があり、すべての CustomItemView には MyItem があります)

ノート :

minSdkVersion: 19.

編集 :

@goldenb のおかげで、問題が絞り込まれ、2 つの解決策が現れました。

解決策 1 :

フラグメントを置き換える代わりに、それらをすべて追加してから表示/非表示にします。

この解決策は何とか機能しますが、問題の本当の解決策ではありません。の削除を回避するFragmentsため、状態が維持されます。

ただし、私の質問は、Fragmentの状態を保存して復元する方法に関するものであるため、これを回答として受け入れることはできません。

解決策 2 :

オーバーライドOverviewFragment#onPauseして状態を保存し、 で復元しOverviewFragment#onCreateます。

この解決策はもっともらしいようで、現在調査中です。CustomItemViewただし、データを からに再配置するには、プロジェクトで再構築が必要なMyAdapterため、しばらく時間がかかります。

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

android - フラグメントの savedInstanceState が機能しない

ここにはいくつかのフラグメントがあり、この 1 つのフラグメントは、戻ったときにその状態を保存したい場所です。ボタンをクリックすると、テキストビューのテキストが「test1」に変更されるテストフラグメントで試してみました(テキストビューのデフォルトのテキストは「新しいテキスト」です)。したがって、テキストビューはテキストを変更しますが、別のフラグメントに移動してそこに戻ると ( HomeFragment)、テキストビューはデフォルトの状態のテキスト (「新しいテキスト」) になります。savedInstanceStateしたがって、フラグメントに戻ったときに「test1」が必要なため、機能していないと思います。これが私のコードです:

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

android - GoogleMap オブジェクトの状態を復元する際の ClassNotFoundException

アクティビティから戻った後にGoogleMap( ) オブジェクトの状態を復元しようとすると、アプリが一貫してクラッシュします。カスタム サポート ライブラリ v4 ( ) にあり、それ自体が( ) に埋め込まれています。これらのコンポーネントのセットアップは正常です。私のデバイスは、プッシュ時にすべての を破棄するように開発者が構成しています。mapViewmapViewFragmentMyFragmentAppCompatActivityMyActivityActivity

別の をプッシュしてポップするとActivity、 myFragmentonCreateView(LayoutInflater, ViewGroup, Bundle state)メソッドが呼び出され、クラッシュします

下部にトレースを生成します。

が の場合、最初の作成時にクラッシュは発生しませ。クラッシュは、MultiDex または Proguard を有効または無効にする (私が見つけた) 組み合わせによって解決されません。statenull

実際、私ができることは、Instant Run を有効にして Android Studio から直接実行することだけです。この場合、すべて問題ありません。Instant Run を無効にして Android Studio から実行すると、クラッシュが発生します。


アップデート:

先週、Google は Android Build Tools v5.0.1 と Google Play Services v10.0 をリリースしました。更新後、この問題は解消されたようです。ただし、他のアイデアが現れるかどうかを確認するために、この質問は開いたままにします。以下の Aлекс のアイデアは、私がとにかく試すことができる良いアイデアです。