0

これが私の問題です:

アクティビティAにはEditTextがあります。このEditTextからのユーザーの入力を保存して、アクティビティD、アクティビティ階層の3つのアクティビティで引き出し、そこに設定したTextViewにスローする必要があります。私はいくつかの方法を試しましたが、どれもうまくいきませんでした。私が遭遇した例では、データを階層内の次のアクティビティにプッシュする、インテント内のバンドルなどの特定のメソッドを実装しています。階層のさらに下にあるアクティビティにデータをプッシュする必要があるため、これらのメソッドは機能しなかったと思います。助言がありますか?

4

4 に答える 4

0

最も簡単なのは、アプリケーションのすべてのアクティビティまたはサービスからアクセスできるSharedPreferencesを利用することです。

単純なデータを転送しようとしているので、キーと値のペアに入れるのは非常に簡単です。

Sharedprefsにデータを保存するには、ユーザーデータを保存するActivityと入力するだけです。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();

editor.putString("key", "value");
editor.commit();

データを取得するアクティビティでは、次を使用します。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String userValue =  prefs.getString("key", "ValueIfKeyDoesNotExist");

もちろん、SharedPreferencesについて読むべきことはもっとたくさんあります-最良の情報源は公式の情報源SharedPreferencesです

SQLiteのようなデータベースを使用することもできますが、その場合、保存する必要のあるデータは非常に単純であるため、DBの利点はわかりません。Intent.putExtra()による多くのアクティビティを介したデータの受け渡しもあまり役に立ちません

于 2013-02-03T00:08:03.760 に答える
0

後でTextViewにプルしたいのがテキスト(EditText)だけの場合。SQLiteデータベースクラスを設定してテキストをデータベースに保存してから、任意のアクティビティでテキストをTextViewにプルすることを検討します。ここに設定に関する良いリンクがあります:Android用SQLite

于 2013-02-03T00:21:42.973 に答える
0

バンドルルートを使用する場合は、同じバンドルをアクティビティの階層に継続的に渡すか、あるバンドルから次のバンドルにデータを保存できます。SharedPreferencesを使用することもできます。これは、アプリケーションが強制終了された場合にデータを永続化する必要があるかどうかによって異なります。

于 2013-02-03T05:02:44.257 に答える
0

データベースはかなり良い考えだと思います。ただし、やり過ぎの場合は、カスタムApplicationオブジェクトの静的変数(おそらくリストやマップ)を検討することをお勧めします。マニフェストのapplication要素にandroid:name = "。MyApplication"属性を追加してから、Applicationを拡張する新しいクラスMyApplicationを作成します。これを行うと、アクティビティAは次のように呼び出すことができます。

((MyApplication) getApplication()).setUserText(editText.getText().toString())

...およびアクティビティDは次のように呼び出すことができます。

editText.setText(((MyApplication) getApplication()).getUserText()).

メッセージパッシングプロトコルのシマンティクスを理解する必要があります。DがAの前に開始された場合はどうなるかなどですが、これにより、ある場所から別の場所に文字列が取得されます。

于 2013-02-05T00:19:56.453 に答える