您的位置:首页 > 移动开发 > Android开发

Android-startActivityForResult用法

2016-12-02 00:07 393 查看
从子Activity获取返回结果

public void startActivityForResult(Intent intent, int requestCode)

该方法的第一个参数是intent,第二个参数是请求代码。请求代码先发送给子activity,然后再返回给父activity的用户定义整数值。当一个activity启动多个不同类型的子activity,且需要判断区分消息回馈方时,通常会用到该请求代码

设置返回结果

public final void setResult(int resultCode)

public final void setResult(int resultCode,Intent data)

一般来说,参数resultCode可以是以下两个预定义常量中的任何一个

Activity.RESULT_OK

Activity.RESULT_CANCELED

一个例子的效果图



Demo目录



字符串资源

<string name="one">1+1=?</string>
<string name="two">2+2=?</string>

<string name="one_answer">2</string>
<string name="two_answer">4</string>


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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/one"/>

<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/two"/>
</LinearLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_ONE = 1;
private static final int REQUEST_TWO = 2;

private Button btn1;
private Button btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);

btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(ChooseActivity.newIntent(MainActivity.this), REQUEST_ONE);
}
});

btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(ChooseActivity.newIntent(MainActivity.this), REQUEST_TWO);
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
showResult(requestCode,ChooseActivity.getResultAnswer(data));
}
}

private void showResult(int requestCode, int answer) {
String str;
if (requestCode == answer) {
str = "正确";
} else {
str = "错误";
}
Snackbar.make(this.getWindow().getDecorView(), str, Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
}


activity_choose.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_choose"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/one_answer"/>

<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/two_answer"/>
</LinearLayout>


ChooseActivity.java

public class ChooseActivity extends AppCompatActivity {

public static final String RESULT_ANSWER = "result_answer";

public static Intent newIntent(Context context) {
return new Intent(context, ChooseActivity.class);
}

public static int getResultAnswer(Intent intent) {
return intent.getIntExtra(RESULT_ANSWER, 0);
}

private Button btn1;
private Button btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose);

btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);

btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra(RESULT_ANSWER, 1);
setResult(RESULT_OK, i);
finish();
}
});

btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra(RESULT_ANSWER, 2);
setResult(RESULT_OK, i);
finish();
}
});
}
}


如果要使用Snackbar,要加入依赖

compile 'com.android.support:design:24.0.0-beta1'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息