Android学习笔记——Activity之间传递数据

【Android学习笔记——Activity之间传递数据】在Activity中,经常有需要传输数据的时候,两个活动之间传输数据使用Intent来传递数据。
Intent可以携带数据,intent有许多的putextra方法的重载,可以存入数据。然后在被启动的活动中可以使用getIntent()方法来获得启动Activity的intent,然后就可以通过这个Intent来获取数据。

public class MainActivity extends AppCompatActivity { Button button; EditText editText; public static final String SEND_MESG = "MSG"; public static final int RESPONSE_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.btn_startactivity); editText = (EditText) findViewById(R.id.et_mssage); button.setOnClickListener(new View.OnClickListener() {//设置点击时间 @Override public void onClick(View view) Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra(SEND_MESG, editText.getText().toString()); //使用Inent传入Sting数据 startActivityForResult(intent, RESPONSE_CODE); //使用startActivityForResult()开启一个新的活动,并且加入请求码,用以判断是哪个活动开启了新活动 } }); }@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //这个方法会在返回新的活动返回数据的时候调用,第一个参数是请求码,第二个参数是返回码,第三个参数是携带了回传数据的Intent if (requestCode == MainActivity. RESPONSE_CODE) switch (resultCode) { case MainActivity.RESULT_OK: { Toast.makeText(MainActivity.this, data.getStringExtra("data_return"), Toast.LENGTH_SHORT).show(); } } }}

现在来看第二个活动
public class SecondActivity extends AppCompatActivity { TextView textView; EditText editText; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); button = (Button) findViewById(R.id.btn_response); editText = (EditText) findViewById(R.id.et_return); textView = (TextView) findViewById(R.id.tv_show); Intent intent = getIntent(); String s = intent.getStringExtra(MainActivity.SEND_MESG); textView.setText(s); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("data_return",editText.getText().toString()); //同样,在Intent中放入EditText中输入的数据 setResult(MainActivity.RESULT_OK,intent); //然后再调用setResult()方法设置返回值 finish(); } }); } }

RequestCode的作用
请求码的值是由自已设定的,用来标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的处理;
ResutCode的作用
如果用startActivityForResult()方法打开多个不同的Activity,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):
简单的说,RequestCode是新活动用来判断哪个活动开启的它,ResultCode是用来判断返回的数据来自哪个新活动

    推荐阅读