2017-01-09 33 views
0

我有這兩個活動和每一個在單獨的文件:intent對象如何在android中的兩個Activity之間保存/傳輸數據?

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); 
    } 
    } 
在MainActivity我們創建 Intent對象並按住他的一些數據

, 在DisplayMessageActivity使用getIntent()方法, 我們得到這個意圖,這種方法的返回給我們Intent對象 我的問題是這種方法如何返回給我們我們在MainActivity中創建的相同意圖?

+0

你想知道Android如何在內部處理Intents? 然後我鼓勵大家深入瞭解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"); 

字符串變量 - 數據會認爲你附有價值之前的活動。這意味着,您只能使用此方法直到下一個活動。

0

您必須實現onActivityResult你MainActivity並開始DisplayMessageActivity與startActivityForResult

... 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); 
    } 
} 

和只添加DisplayMessageActivity在,onStoponBackPressedonSupportNavigateUp

//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()如何返回與之前創建的相同對象,而不是新Intent對象? –

+0

然後你調用(在DisplayMessageActivity中)'setResult(RESULT_OK,getIntent());'這將返回發送給DisplayMessageActivity的Intent到MainActivity。相同的內容。如果它真的是同一個對象,或者只是一個副本超出我的知識範圍。 –

相關問題