102

ある画面から前の画面に値を渡すにはどうすればよいですか?

このケースを考えてみましょう: 私には 2 つのアクティビティがあります。最初の画面には 1 つとTextViewボタンがあり、2 番目のアクティビティには 1 つとEditTextボタンがあります。

最初のボタンをクリックすると、2 番目のアクティビティに移動する必要があり、ここでユーザーはテキスト ボックスに何かを入力する必要があります。彼が 2 番目の画面からボタンを押すと、テキスト ボックスの値が最初のアクティビティに移動し、それが最初のアクティビティに表示されますTextView

4

6 に答える 6

247

あるアクティビティで実行されたアクションを別のアクティビティ内にキャプチャするには、3 つの手順が必要です。

startActivityForResultメイン アクティビティから使用して、セカンダリ アクティビティ (「テキストの編集」アクティビティ) をサブアクティビティとして起動します。

Intent i = new Intent(this,TextEntryActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

サブアクティビティ内では、ユーザーがボタンをクリックしたときに単にアクティビティを閉じるのではなく、新しいインテントを作成し、入力したテキスト値をエクストラ バンドルに含める必要があります。セカンダリ アクティビティを閉じるために呼び出すsetResult前に、それを親呼び出しに戻す。finish

Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

最後のステップは、呼び出し側のアクティビティにあります。オーバーライドonActivityResultして、テキスト入力アクティビティからのコールバックをリッスンします。返された Intent からエクストラを取得して、表示する必要があるテキスト値を取得します。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Update your TextView.
      } 
      break; 
    } 
  } 
} 
于 2009-07-14T12:14:00.770 に答える
10

他のクラスまたはアクティビティの変数またはオブジェクトにアクセスするには、いくつかの方法があります。

A. データベース

B. 共有設定。

C. オブジェクトのシリアル化。

D. 共通データを保持できるクラスは、依存する共通ユーティリティとして名前を付けることができます。

E. Intents と Parcelable Interface を介してデータを渡す。

プロジェクトのニーズによって異なります。

A.データベース

SQLite は、Android に組み込まれているオープン ソース データベースです。SQLite は、SQL 構文、トランザクション、準備済みステートメントなどの標準的なリレーショナル データベース機能をサポートしています。

チュートリアル -- http://www.vogella.com/articles/AndroidSQLite/article.html

B.共有設定

ユーザー名を保存するとします。そのため、キーユーザー名、、値の 2 つが存在することになります。

保管方法

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

putString()、putBoolean()、putInt()、putFloat()、putLong() を使用して、目的の dtatype を保存できます。

取得方法

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/reference/android/content/SharedPreferences.html

C.オブジェクトのシリアル化

オブジェクトの状態を保存してネットワーク経由で送信したい場合、または目的に合わせて使用​​する場合は、オブジェクトのシリアル化を使用します。

Java Bean を使用してフィールドの 1 つとして格納し、そのためにゲッターとセッターを使用します。

JavaBeans は、プロパティを持つ Java クラスです。プロパティはプライベート インスタンス変数と考えてください。これらはプライベートであるため、クラスの外部からアクセスできる唯一の方法は、クラス内のメソッドを使用することです。プロパティの値を変更するメソッドはセッター メソッドと呼ばれ、プロパティの値を取得するメソッドはゲッター メソッドと呼ばれます。

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

を使用してメールメソッドに変数を設定します

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

次に、オブジェクト Serialzation を使用してこのオブジェクトをシリアル化し、他のクラスでこのオブジェクトを逆シリアル化します。

シリアライゼーションでは、オブジェクトは、オブジェクトのデータと、オブジェクトのタイプおよびオブジェクトに格納されているデータのタイプに関する情報を含む一連のバイトとして表すことができます。

シリアル化されたオブジェクトがファイルに書き込まれた後、そのオブジェクトをファイルから読み取って逆シリアル化できます。つまり、オブジェクトとそのデータを表す型情報とバイトを使用して、メモリ内にオブジェクトを再作成できます。

このためのチュートリアルが必要な場合は、このリンクを参照してください

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

他のクラスで変数を取得する

D.共通ユーティリティ

プロジェクトで頻繁に必要とする共通データを含むクラスを自分で作成できます。

サンプル

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E.インテントを介してデータを渡す

データを渡すこのオプションについては、このチュートリアルを参照してください。

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

于 2013-06-25T20:15:58.140 に答える
6

あなたはする必要はありません...

2 番目のアクティビティから newIntent() を呼び出すだけです

Intent retData=new Intent();

返すデータを追加する

putExtras (retData.putExtra("userName", getUsrName()));

setResult で先に進む

setResult(RESULT_OK, retData);

そして、終了することができます

finish();
于 2011-02-20T08:25:53.993 に答える
4

startActivityForResult()

SDK からの詳細情報へのリンクは次のとおりです。

http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen

「画面から結果を返す」というタイトルの部分までスクロールします。

于 2009-07-14T11:11:46.430 に答える
2

私はよく、静的セッター メソッドを使用して呼び出しアクティビティで静的変数を使用して、それらを設定します。

このようにして、さまざまなアクティビティ間の正確な制御フローに関係なく、任意のアクティビティの値を自由に変更できます。

このトリックは、アプリケーションで同じアクティビティ (クラス) の複数のコピーをインスタンス化することを気にしない場合にのみ使用できることに注意してください。 .

于 2011-05-19T06:56:28.943 に答える