intent对象如何在android中的两个Activity之间保存/传输数据?
我有这两个活动和每一个在单独的文件: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
中创建的相同意图?
根据官方文档,得到的意图是用来
返回已启动该活动的意图。
这意味着它是一个函数,它返回最初启动该活动的意图。 这回答您的查询。
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");
字符串变量 - 数据会认为你附有价值之前的活动。这意味着,您只能使用此方法直到下一个活动。
您必须实现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在,onStop
或onBackPressed
和onSupportNavigateUp
:
//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
抱歉,您不明白我的问题,需要了解getIntent()如何返回与之前创建的相同对象,而不是新Intent对象? –
然后你调用(在DisplayMessageActivity中)'setResult(RESULT_OK,getIntent());'这将返回发送给DisplayMessageActivity的Intent到MainActivity。相同的内容。如果它真的是同一个对象,或者只是一个副本超出我的知识范围。 –
你想知道Android如何在内部处理Intents? 然后我鼓励大家深入了解Android源代码。 –
我只需要关于此技术的高级知识,我不想在许多代码中潜水 –