Android学习碎片(一)——startActivityForResult

方法startActivity(Intent)是用来启动一个新的活动,这个活动将会被放在活动栈的顶端。这个方法只需要一个Intent类型的参数,来描述将被启动的活动。

有时候你想得到一个活动结束后返回的数据。例如,你可能会启动一个活动来让用户从一张联系人表里选择一个联系人;当这个活动结束时,它将会返回选中的联系人。为了做到这样的事,你可以调用startActivityForResult(Intent,int)方法,第二个integer参数即请求码,用来区别启动的子活动。通过onActivityResult(int, int, Intent)方法得到返回的结果。

当一个活动已经存在,它可以通过setResult(int)方法返回数据给启动它的父活动。这个方法需要一个结果码,可以是官方提供的标准码RESULT_OK、RESULT_CANCELED,也可以是自定义的从RESULT_FIRST_USER(即1)开始的数据(比如1、2、3等)。另外,也可以提供一个包含你想要传递的数据的Intent类型参数。所有这些数据都会出现在启动这个子活动的父活动的onActivityResult()方法中,包括之前提供的请求码。

为了了解startActivityForResult相关方法的具体用法,我写了一下代码作为练习。比较简单,就不写注释了。

public class MainActivity extends AppCompatActivity {

    private Button button1, button2;
    private TextView textView;
    private static final int SECOND = 1;
    private static final int THIRD = 2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView)findViewById(R.id.text_main);

        button1 = (Button)findViewById(R.id.button1_main);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                String toSecond = "This is Main, Hello Second!";
                intent.putExtra("FromMain", toSecond);
                startActivityForResult(intent, SECOND);
            }
        });

        button2 = (Button)findViewById(R.id.button2_main);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
                String toThird = "This is Main, Hello Third!";
                intent.putExtra("FromMain", toThird);
                startActivityForResult(intent, THIRD);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case SECOND:
                if (resultCode == RESULT_OK) {
                    String fromSecond = data.getStringExtra("FromSecond");
                    textView.setText(fromSecond);
                    Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show();
                } else if (resultCode == RESULT_CANCELED) {
                    String fromSecond = data.getStringExtra("FromSecond");
                    textView.setText(fromSecond);
                    Toast.makeText(this, "CANCELED", Toast.LENGTH_SHORT).show();
                }
                break;
            case THIRD:
                if (resultCode == RESULT_OK) {
                    String fromThird = data.getStringExtra("FromThird");
                    textView.setText(fromThird);
                    Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show();
                } else if (resultCode == RESULT_CANCELED) {
                    String fromThird = data.getStringExtra("FromThird");
                    textView.setText(fromThird);
                    Toast.makeText(this, "CANCELED", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
}

获取两个按钮,一个前往第二个活动,一个前往第三个活动。

在onActivityResult中,第二个活动会返回数据,但是通过判断结果码来判断下一步执行步骤。第三个活动也是这样。

第二个活动的代码:

public class SecondActivity extends AppCompatActivity {

    private Button button1, button2;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        textView = (TextView)findViewById(R.id.text_second);
        String fromMain = getIntent().getStringExtra("FromMain");
        textView.setText(fromMain);

        button1 = (Button)findViewById(R.id.button1_second);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this, MainActivity.class);
                String toMain = "This is Second A, Hello Main!";
                intent.putExtra("FromSecond", toMain);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

        button2 = (Button)findViewById(R.id.button2_second);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this, MainActivity.class);
                String toMain = "This is Second B, Hello Main!";
                intent.putExtra("FromSecond", toMain);
                setResult(RESULT_CANCELED, intent);
                finish();
            }
        });
    }
}

第三个活动的代码:

public class ThirdActivity extends AppCompatActivity {

    private Button button1, button2;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

        textView = (TextView)findViewById(R.id.text_third);
        String fromMain = getIntent().getStringExtra("FromMain");
        textView.setText(fromMain);

        button1 = (Button)findViewById(R.id.button1_third);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ThirdActivity.this, MainActivity.class);
                String toMain = "This is Third A, Hello Main!";
                intent.putExtra("FromThird", toMain);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

        button2 = (Button)findViewById(R.id.button2_third);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ThirdActivity.this, MainActivity.class);
                String toMain = "This is Third B, Hello Main!";
                intent.putExtra("FromThird", toMain);
                setResult(RESULT_CANCELED, intent);
                finish();
            }
        });
    }
}

Android Studio项目

源码下载地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值