2016-04-21 17 views
0

この質問は簡単です。 例えば2つのアクティビティがあります。メインアクティビティとメインアクティビティ2. メインアクティビティからメインアクティビティ2に文字列を送信するにはどうすればいいですか? メインアクティビティ2が文字列を受け取ったとします。その文字列を変更する関数を呼び出します。 変更された文字列をメインアクティビティに送り返す方法は?アクティビティ間変数の送信

+1

結果インテントの一部として返信します –

答えて

0

は、文字列を送信します。

   Intent intent = new Intent(this, MainActivity2); 
       intent.putExtra("string", stringVal); 
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intent); 

次に主な活動2には、文字列を受け取る:

String str = getIntent().getExtras().getString("string"); 

それからちょうど値を変更し、主な活動1にそれを送り返すを、必要ならば、onResume内にインテントを得ることができますが、nullをチェックしてください。

+0

したがって、メインアクティビティ2が文字列を受け取ってそれに変更を加えると、 MainActivity2をMainActivtyに変更してputExtra()の値を変更するだけで、上で書いた同様のコードを使用してメインアクティビティアクティビティに戻すことができますか? – Nikola

+0

正解、試してみてください –

+0

これは動作しますが、私が探しているものは静かではありません。私は十分に具体的ではなく、申し訳ありませんでした。実際に私がしたいのは、メインアクティビティのレイアウトページに留まり、メインアクティビティ2を使わずにメインアクティビティ2に文字列を送信し、自分のデバイス上にレイアウトがポップアップすることです。主な活動2は文字列を受け取り、デバイスは常にメインアクティビティレイアウトにとどまります。メインアクティビティ2は文字列を変更します(2文字を置き換えようとします)、文字列をメインアクティビティに送り返して、実際に変更内容を表示できます(テキストビューなど)。 – Nikola

0

標準的な方法:

あなたはActivity2にActivity1からプリミティブデータを送信したい場合は、あなたがIntentを使用する必要があります。たとえば、あなただけの文字列を送信する場合:

public class Activity1 extends Activity { 
    public static final String EXTRA_STRING = "extra_string"; 

    private void sendString(String s) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra(EXTRA_STRING, s); 
     startActivity(intent); 
    } 
} 

あなたはActivity2でその文字列を変更しても戻っActivity1に結果をたいと、あなたはActivty2にActivity1でstartActivityForResult()setResult()を使用する必要があります。例えば

:Activity2で

public class Activity1 extends Activity { 
    public static final String EXTRA_STRING = "extra_string"; 
    private static final int REQUEST_CODE = 1; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
     if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 
      // Get the string back 
      String changedString = data.getStringExtra(Activity2.EXTRA_STRING); 
     } 
    } 


    private void sendString(String s) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra(EXTRA_STRING, s); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 
} 

public class Activity2 extends Activity { 
    public static final String EXTRA_STRING = "string_extra"; 
    private String myString; 

    @Override 
    public void onCreate(Bundle bundle) { 
     // receive the string from activity1 
     if (getIntent() != null) { 
       myString = getIntent().getStringExtra(Activity1.EXTRA_STRING); 
     } 
    } 

    // Send the string back to activity1 
    private void sendBack() { 
     Intent data = new Intent(); 
     data.putExtra(EXTRA_STRING, myString); 
     setResult(RESULT_OK, data); 
     finish(); 
    } 
} 

方法の欠点は、あなただけの原始的な変数を送信することができます。オブジェクトを送信する場合は、ParcelableまたはSerializableを実装する必要があります。

迅速かつ簡単な方法:

あなたは、アクティビティ、サービスまたはものは何でもEventBusを使用したいとの間の複雑なオブジェクトをどのような種類の変数を送信することができます。それを使用する方法を知るにはDocumentationを見てください。本当に素早く簡単です。主な活動1から

関連する問題