2017-01-09 8 views
0

私は、これら2つのアクティビティがあり、それぞれが別々のファイルに:MainActivityでアンドロイド内の2つのアクティビティ間でオブジェクトがどのようにデータを保持/転送するのか?

public class MainActivity extends AppCompatActivity { 
     public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 

     /** Called when the user clicks the Send button */ 
     public void sendMessage(View view) { 
      Intent intent = new Intent(this, DisplayMessageActivity.class); 
      EditText editText = (EditText) findViewById(R.id.edit_message); 
      String message = editText.getText().toString(); 
      intent.putExtra(EXTRA_MESSAGE, message); 
      startActivity(intent); 
     } 
    } 

    public class DisplayMessageActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_message); 

     Intent intent = getIntent(); 
     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
     TextView textView = new TextView(this); 
     textView.setTextSize(40); 
     textView.setText(message); 

     ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_message); 
     layout.addView(textView); 
    } 
    } 

我々はIntentオブジェクトを作成し、彼にいくつかのデータを保持し、我々はgetIntent()方法、 、このメソッドの戻り値を使用して、この意図を取得DisplayMessageActivityIntentオブジェクト 私の質問は、私たちが同じ意図を私たちに返す方法です。MainActivity ??

+0

Androidがインテントを内部的に処理する方法を知りたいですか? その後、Androidのソースコードを詳しく見てみることをおすすめします。 –

+0

私はちょうどこの技術に関する高度な知識が必要です。私は多くのコードでダイビングしたくありません –

答えて

0

は、その意図はリターンこの活動を始めた意図

に使用されます。

これは、元々そのアクティビティを開始したインテントを返す関数であることを意味します。 それはあなたの質問に答えます。

Android Developers Documentation - Activity - getIntent()

常に公式ドキュメントを読んですることをお勧めします。

エキストラを追加するための一般的な構文は次のとおりです。

Intent intent = new Intent(context, activity.class); //Create intent to start activity 
intent.putExtra("key", data); //adding data 
startActivity(intent); 

あなたが始めた活動から、そのデータを受信するには:

Intent intent = getIntent(); 
String data = intent.getExtra("key"); 

String変数 - データはあなたが添付値を保持します以前の活動つまり、このメソッドは次のアクティビティまでしか使用できません。

0

あなたはMainActivityでonActivityResultを実装し、startActivityForResultでDisplayMessageActivityを開始する必要があります。

... sendMessage(View view) { 
    ... 
    startActivityForResult(intent, MESSAGE_RESULT_CODE); 
} 

public void onActivityResult(int requestcode, int resultcode, Intent data) { 
    //You can get your result intent data here 
    if (requestcode == MESSAGE_RESULT_CODE && resultcode == RESULT_OK) { 
     Intent intent = getIntent(); 
     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
    } 
} 

とちょうど、onStopまたはonBackPressedonSupportNavigateUpにDisplayMessageActivityに追加する:

さらに
//in your case maybe 'your_intent_sent_back_to_mainactivity = getIntent();' 
setResult(RESULT_OK, your_intent_sent_back_to_mainactivity); 


Androidの開発者コミュニティにおけるソース:公式ドキュメントによると

https://developer.android.com/training/basics/intents/result.html

+0

申し訳ありませんが、私の質問を理解していない、getIntent()は、オブジェクト? –

+0

次に(DisplayMessageActivityで) 'setResult(RESULT_OK、getIntent());を呼び出します。これは、DisplayMessageActivityに送信されたインテントをMainActivityに返します。同じ内容。それが本当に同じオブジェクトであるか、コピーが私の知る以上にある場合。 –

関連する問題