2017-01-09 80 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。相同的内容。如果它真的是同一个对象,或者只是一个副本超出我的知识范围。 –

相关问题