3

私のアプリケーションには、A と B の 2 つのレイアウトがあります。

A では、ユーザーが無線ボタンを押してデータを選択します。次に、BUTTON を押して B レイアウトに移動し、この選択した変数を使用していくつかのビュー (EditTexts、TextVies、および Buttons) を動的に構築します。

レイアウト A では、ユーザーが選択したデータを保存するために onDestroy() を実装しました (onStop() を実装すると同じことが起こります)。戻るか、ホームを押してタスクマネージャーから削除してアプリを終了すると、ユーザーがアプリケーションを再度起動しても、ユーザーが選択したデータは引き続き表示されます。

さて、レイアウト B では、最初にレイアウト A のユーザーが選択したデータに基づいてビューの最初の部分を構築し、次に、ユーザーがそのレイアウトに必要な数のビューを追加および削除できるようにする追加のボタンも用意します。

今、ここに私の混乱が生じます...................... ユーザーがレイアウト B に必要なものをすべて入力した後、A に戻るか、アプリを終了します。レイアウト B に入力されたデータを保存します。SharedPreferences を使用してデータを保存する方法は知っていますが、レイアウト B に実装する必要があるメソッドや、ミッションを達成するために A に追加する必要があるメソッドはわかりません。

これはまさに私がやりたいことです.....レイアウトBのユーザーが入力したデータでアプリを起動できるようにすることだけです。レイアウトAは機能しているようです。ユーザーがレイアウトAで同じデータを選択した場合(すべてをそのままにしておくことを意味します)、保存したデータを使用したい場合のみ、ユーザーの新しい選択で新しいレイアウトBを再起動したい.

もう1つの問題。ユーザーが B からレイアウト A に戻った場合、すべてがレイアウト A に保存されているため、ボタンを押してレイアウト B に戻ることができます (選択した値を変更したい場合や、誤って [戻る] ボタンを押してしまった場合など)。レイアウト B にも onDestroy() を実装しましたが、問題があります。ユーザーがレイアウト A の選択を変更せずにレイアウト B に再度移動すると、保存したものはすべて再構築されますが、A に戻って再び B に戻った場合、そこにはありません。これは毎回発生し続けます。 ... 行ったり来たりすると、保存されたデータが奇数回しか表示されず、偶数回しか表示されません。

レイアウト B では、すべてを onDestroy() に保存し、次に onCreate() でレイアウト A のデータが同じかどうかを確認して、レイアウト B を再構築できるようにします。それ以外の場合、レイアウト B が新しくなります。

4

2 に答える 2

1

これらは常に呼び出されるため、使用する代わりにを使用することをお勧めしonDestroy()/onCreate()ますが、onDestroy()の呼び出しはあちこちで見落とされる可能性があります。onPause()/onResume()

onPause()アクティビティAとBの両方に実装する必要があります。

設定を確実に保存する方法を理解したらonPause()、アプリケーションロジックに従って、保存されたデータが不要なときに破棄することができます。

于 2012-06-25T01:40:15.560 に答える
0

onDestroy は、データをシリアル化するには遅すぎます。アクティビティがいつ破棄されるかはわかりません。

ともかく。何らかの方法でアクティビティ B を呼び出している必要があります。これらの値をインテントのエクストラとして渡してみませんか?

于 2012-06-25T00:09:13.667 に答える