Activity的传值和回传值
在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方法了,而是使用 startActivityForResult方法来完成我们的操作。
activity_main.xml 如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="example.com.a2018_1_5shangke.MainActivity">
<Button
android:onClick="intentToOtherResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="回传值" />
<TextView
android:text="请选择城市"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:id="@+id/mtextview"/>
</LinearLayout>
activity_second.xml 如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text11"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/mlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/text11"></ListView>
</RelativeLayout>
MainActivity.java
private TextView mtextview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtextview = (TextView) findViewById(R.id.mtextview);
}
public void intentToOtherResult(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
/*
* 如果希望启动另一个Activity,并且希望有返回值,则需要使用startActivityForResult这个方法,
* 第一个参数是Intent对象,第二个参数是一个requestCode值,如果有多个按钮都要启动Activity,则requestCode标志着每个按钮所启动的Activity
*/
startActivityForResult(intent, 1);
}
@Override
/**
* 所有的Activity对象的返回值都是由这个方法来接收
* requestCode: 表示的是启动一个Activity时传过去的requestCode值
* resultCode:表示的是启动后的Activity回传值时的resultCode值
* data:表示的是启动后的Activity回传过来的Intent对象
*/
protected void onActivityResult(
int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode ==
1 && resultCode ==
RESULT_OK) { String city = data.getStringExtra(
"city");
mtextview.setText(city); }}
SecondActivity.java
private ListView mlistView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mlistView = (ListView) findViewById(R.id.mlistview);
final String[] citys = {"北京", "上海", "广州", "深圳", "杭州", "哈尔滨"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
SecondActivity.this,
android.R.layout.simple_list_item_1,
citys
);
mlistView.setAdapter(adapter);
mlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String city = citys[position];
Intent intent = new Intent();
intent.putExtra("city", city);
setResult(RESULT_OK, intent);
/*
* 调用setResult方法表示我将Intent对象返回给之前的那个Activity,这样就可以在onActivityResult方法中得到Intent对象,
*/
SecondActivity.
this.finish();
//
finish() 结束当前这个Activity对象的生命
} });}


