Activity-forResult

使用场景

跳转页面返回后,Main页面可直接获取跳转页面的数据,无需再次请求服务器。

结果如下图:

在这里插入图片描述

使用方式

  • 1 在MainActivity中给不同Activity定义请求码
    private static final int REQUEST_FIRST = 0;
    private static final int REQUEST_SECOND = 1;
  • 2 调用startActivityForResult方法
startActivityForResult(new Intent(this, FirstActivity.class), REQUEST_FIRST);
  • 3 在MainActivity中重写onActivityResult方法
    /**
     * 仅当使用startActivityForResult方法启动时,
     * 请求的Activity完成任务被finish()之后回调此方法
     * requestCode: 请求代码,就是startActivityForResult()里面的请求代码。
     * resultCode: 返回代码,就是setResult()方法里面的设置的参数。
     * Intent: setResult(int, Intent)里面的放置数据的Intent。
     * */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_FIRST:
                Toast.makeText(this, "Come from FirstActivity", Toast.LENGTH_LONG).show();
                switch (requestCode) {
                    case FirstActivity.RESULT_SUCCESS:
                        Toast.makeText(this, data.getStringExtra("name"), Toast.LENGTH_LONG).show();
                        break;
                    case FirstActivity.RESULT_FAILED:
                        break;
                }
                break;
            case REQUEST_SECOND:
                Toast.makeText(this, "Come from SecondActivity", Toast.LENGTH_LONG).show();
                break;
        }
    }
  • 4 在跳转的Activity中调用setResult方法
    public static final int RESULT_SUCCESS = 0;
    public static final int RESULT_FAILED = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        //具体的操作。。。
        boolean result = true;
        
        Intent intent = getIntent();
        intent.putExtra("name", "TF");

        if (result) {
            setResult(RESULT_SUCCESS, intent);
        } else {
            setResult(RESULT_FAILED);
        }

        //结束,返回到MainActivity,回调onActivityResult
        finish();
    }

注意

在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值