在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是用来判断返回的数据来自哪个新活动