如何在android中的两个Activity之间保存/传输数据?

时间:2017-01-09 17:38:24

标签: java android android-intent

我有这两个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 ??

中创建的相同Intent

2 个答案:

答案 0 :(得分: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);
    }
}

只需在onPauseonStoponBackPressedonSupportNavigateUp中添加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

答案 1 :(得分:0)

根据官方文档,get intent用于

  

返回开始此活动的意图。

这意味着它是一个返回最初启动该活动的意图的函数。 这回答了你的疑问。

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变量 - 数据将保存您在上一个活动中附加的值。这意味着,您只能使用此方法直到下一个活动。