202

Activity1Activity2の 2 つのアクティビティがあります。

Activity1私はButtonTextView持っています。ボタンをクリックすると、Activity2が開始されます。

Activity2私はEditText持っています。

Activity2から Backを押したときに、Activity1 の TextView にActivity2EditTextから取得たデータを表示したいと考えています。

誰かがこれを機能させるためのコードを手伝ってくれますか?

4

10 に答える 10

362

でActivity2を開始し、Activity2からActivity1にデータを送り返すためのメソッドをstartActivityForResult使用します。Activity1では、Activity2のデータで更新するsetResultためにオーバーライドする必要があります。onActivityResultTextViewEditText

例えば:

Activity1で、Activity2を次のように開始します。

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);

Activity2setResultで、データを送り返すために使用します。

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();

そして、Activity1で、次のデータを受け取りますonActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String strEditText = data.getStringExtra("editTextValue");
         }     
    }
} 

可能であれば、SharedPreferencesを使用してアクティビティ間でデータを共有することもできます。

于 2013-01-12T10:32:09.273 に答える
29

Activity1は、 Activity2をで開始する必要がありstartActivityForResult()ます。

Activity2は、データをActivity1setResult()に送り返すために使用する必要があります。

Activity2では、

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}

Activity1では、

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}
于 2013-01-12T10:30:51.770 に答える
7

This を startActivityforResult の代替として使用します。ただし、このような場合、このアプローチはパフォーマンスの面でコストがかかる可能性があることに注意してください。ただし、場合によっては使用する必要があるかもしれません。

アクティビティ2では、

@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}

アクティビティ1では、

 @Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String  dataFromOtherAct= sp.getString("email", "no email");
} 
于 2015-01-26T15:03:25.613 に答える
3

これが最初の Activity1 です。

public class Activity1 extends Activity{
private int mRequestCode = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, Activity2.class);
    startActivityForResult(intent, mRequestCode);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == mRequestCode && resultCode == RESULT_OK){
        String editTextString = data.getStringExtra("editText");
    }
}
}

ここから、startActivityForResult(mRequestCode, Activity2.class);を使用して Activity2.class を開始します。

これが 2 番目のアクティビティで、名前は Activity2 です

public class Activity2 extends Activity {
private EditText mEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //mEditText = (EditText)findViewById(R.id.edit_text);

    Intent intent = new Intent();
    intent.putExtra("editText", mEditText.getText().toString());
    setResult(RESULT_OK, intent);
}

}

2番目のアクティビティが完了したら、 onBackPress() から、またはActivity2が破棄されるときに任意のボタンクリックから setResult() メソッドを呼び出し、Activity1のコールバックメソッドonActivityResult()がそこから呼び出され、インテントからデータを取得できます..

それがあなたに役立つことを願っています... :)

于 2013-01-12T10:50:23.233 に答える
2

これらを読んでください:

  1. 結果を onActivityResult() に返す
  2. 呼び出されたアクティビティから結果を取得する - 初心者向け Android チュートリアル

これらの記事は、Android の 2 つのアクティビティ間でデータを渡す方法を理解するのに役立ちます。

于 2013-01-12T10:30:42.207 に答える
1

TL;DR使用Activity.startActivityForResult

長い答え:

まず、Android開発者向けドキュメントを読む必要があります。具体的には、質問のトピックはドキュメントのStarting Activities and Getting Resultsセクションで説明されていActivityます。

サンプルコードとして、AndroidSDKは良い例を提供します。また、ここでの他の回答は、使用するサンプルコードの短いスニペットを提供します。

ただし、代替案を探している場合は、このSOの質問を読んでください。これは、startActivityForResultsフラグメントを使用する方法、およびアクティビティ間でデータを渡すためのいくつかのアプローチについての良い議論です。

于 2013-01-12T10:34:17.017 に答える