从子 Activity 获取返回结果

来源:互联网 发布:易语言赚钱源码 编辑:程序博客网 时间:2024/06/06 03:25

在 Android 开发中,经常会通过某个父 Activity 启动一个子 Activity,用户
在子 Activity 上的操作信息又需要返回给父 Activity 。对于这种需求,我们
不是在父 Activity 直接调用 startActivity() 函数来启动子 Activity,而是调用
startActivityForResult()函数。

需要从子activity获取返回信息时,可调用以下Activity方法:

public void startActivityForResult(Intent intent, int requestCode)

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

1,在父 Activity 中声明请求码,在点击跳转到子 Activity 处,使用如下代码:

    private static final int REQUEST_CODE_CHEAT = 0;     /**     * 点击跳转挑战至子 activity     * @param view     */    public void cheat(View view) {        boolean answerTrue = mQuestionBank[mCurrentIndex].getAnswerTrue();        Intent intent = CheatActivity.newIntent(this, answerTrue);        startActivityForResult(intent,REQUEST_CODE_CHEAT);    }

2,设置返回结果值。(子 Activity)

package com.gyq.geoquiz;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;public class CheatActivity extends AppCompatActivity {    private static final String EXTRA_ANSWER_IS_TRUE =            "com.gyq.geoquiz.answer_is_true";    private static final String EXTRA_ANSWER_SHOWN =            "com.bignerdranch.android.geoquiz.answer_shown";    private TextView mAnswerTextView;    private Button mShowAnswer;    private boolean mAnswerIsTure;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_cheat);        mAnswerIsTure = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);        mAnswerTextView = (TextView) findViewById(R.id.answer_text_view);        mShowAnswer = (Button) findViewById(R.id.show_answer_button);        mShowAnswer.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (mAnswerIsTure) {                    mAnswerTextView.setText(R.string.true_button);                } else {                    mAnswerTextView.setText(R.string.false_button);                }                setAnswerResult(true);            }        });    }    public static Intent newIntent(Context context,boolean answerIsTrue) {        Intent i = new Intent(context, CheatActivity.class);        i.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);        return i;    }    //第二步    private void setAnswerResult(boolean isAnswerShown) {        Intent data = new Intent();        data.putExtra(EXTRA_ANSWER_SHOWN,isAnswerShown);        setResult(RESULT_OK,data);    }}

3,解析结果 Intent(子 activity)

    public static boolean wasAnswerShown(Intent result) {        return result.getBooleanExtra(EXTRA_ANSWER_SHOWN,false);    }

4,处理返回结果(父 activity)

private boolean mIsCheater;@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode != RESULT_OK) {            return;        }        if (requestCode == REQUEST_CODE_CHEAT) {            if (data == null) {                return;            }            mIsCheater = CheatActivity.wasAnswerShown(data);        }    }
原创粉丝点击