一、Intent 可以启动一个活动,也可以在启动活动的时候传递数据。intent中提供了putExtra()方法,它可以把我们想要传递的数据暂存在intent中,启动了另一个活动后,通过getIntent().getStringExtra()、(或者getIntent().getIntExtra()通过活动传递的数据类型决定),再从 Intent中取出。
二、如果需要返回数据给上一个活动,则不在用startActivity()方法启动活动,而是通过startActivityForResult()方法来启动活动,这个方法是期望在活动销毁的时候能够返回一个结果给上一个活动。并且需要通过onActivityResult()方法来得到返回的数据。
三、本次要演示的代码为,通过点击activity_main.xml中的按钮传递数据,给act2.xml中的textView。然后,通过点击act2.xml的按钮返回一个数据给acitvity.main中的textView。
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="mainActivity界面"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转"/>
</LinearLayout>
act2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="act2界面"/>
<Button
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回mainActivity"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button mIntentButton;
private TextView mTvBack; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTvBack = (TextView) findViewById(R.id.tv_back);
mIntentButton = (Button) findViewById(R.id.btn);
mIntentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Act2.class);
//使用putExtra()方法传递数据
intent.putExtra("name","从mainActivity传过来的数据");
//由于需要返回数据,使用 startActivityForResult()方法
startActivityForResult(intent,1);
}
});
}
//此方法是用来接收返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1){
if(resultCode == RESULT_OK){
String st = data.getStringExtra("back");
mTvBack.setText(st); }
}
}
}
Act2.java:
public class Act2 extends AppCompatActivity{
private TextView mTv;
private Button mBtnBack;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
//接收intent数据
String var = getIntent().getStringExtra("name");
mTv = (TextView) findViewById(R.id.tv);
mTv.setText(var);
mBtnBack = (Button) findViewById(R.id.btn_back);
mBtnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("back","返回到mainactivity");
setResult(RESULT_OK,intent);
finish();
}
}); }
}
来自个人博客:intent,实现两个活动之间数据的传递