安卓开发 - startActivityForResult() 的用法

安卓开发中一个很基础的操作就是打开一个 Activity ,另一个很必要的操作就是,打开一个 Activity ,在打开的 Activity 中操作之后并获得返回结果。

两个 Activity

为了演示这个操作,我们需要两个 Activity : MainActivity 和 OtherActivity ,在 MainActivity 中通过 Intent 启动 OtherActivity ,并获得 OtherActivity 结束后返回的结果,例子仅作演示,为了方便,我直接在 Java 文件中定义了控件,就不写布局文件了。

MainActivity.java

package net.conw.intenttest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements View.OnClickListener {

    private EditText editText;
    private Button button;
    public static int REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        editText = new EditText(this);
        button = new Button(this);
        button.setText("Main");
        button.setOnClickListener(this);

        layout.addView(editText);
        layout.addView(button);
        setContentView(layout);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, OtherActivity.class);
        intent.putExtra("text", editText.getText().toString());
        startActivityForResult(intent, REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE && resultCode == OtherActivity.RESULT_CODE) {
            editText.setText(data.getStringExtra("text"));
        }
    }
}

OtherActivity.java

package net.conw.intenttest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class OtherActivity extends Activity implements View.OnClickListener {

    private EditText editText;
    private Button button;
    public static int RESULT_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        editText = new EditText(this);
        button = new Button(this);
        button.setText("Other");
        button.setOnClickListener(this);

        layout.addView(editText);
        layout.addView(button);
        setContentView(layout);

        editText.setText(getIntent().getStringExtra("text"));
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.putExtra("text", editText.getText().toString());
        setResult(RESULT_CODE, intent);
        finish();
    }
}

整个代码的执行逻辑如下:
1、两个 Activity 的代码就是这样的, 当 MainActivity 中的 Button 被触发 onClick() 事件后,把 MainActivity 中的 EditText 的内容发给了 OtherActivity 。
2、OtherActivity 打开并初始化好控件后,把 EditText 的内容设置为 MainActivity 发过来的内容。
3、当 OtherActivity 中的 Button 被触发 onClick() 事件后,把 OtherActivity 中的 EditText 的内容返回给 MainActivity。
4、当返回到 MainActivity 时,会执行 ononActivityResult() 方法的内容,判断如果 RequestCodeResultCode 无误后,把 MainActivity 中的 EditText 的内容改为 OtherActivity 返回的结果。(这里判断了 RequestCodeResultCode ,所以 OtherActivity 通过 Back 键返回时, MainActivity 的内容不会改变)

所以结果就是,通过这样的方式打开这两个Activity,他们中的 EditText 的内容是同步的,一个 Activity 改变了,到另一个 Activity 中也会跟着改变。

标签: android

已有 2 条评论

  1. 没有Application好用--

添加新评论