startActivityForResult的使用

  startActivityForResult的主要作用就是回传数据。假设我们有两个页面,在第一个页面上有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish动作或者back动作后,将设置的值回传给第一个页面,从而在第一个页面上显示所得到的值。这有点像回调方法,就是在第二个页面finish动作或者back动作后,会回调第一个页面的onActivityResult方法,所以我们可以重写一下这个方法。
  startActivityForResult原型如下:

startActivityForResult(Intent intent, int requestCode);
  • Intent:它是一个Intent对象,用于携带将跳转至下一个界面中使用的数据,使用putExtra方法夹载数据。此处存储的数据类型特别多,基本类型全部支持。
  • requestCode:该参数大于等于0,当Activity结束时,requestCode将归还至onActivityResult中,以便确定返回的数据是从哪个Activity中返回,用来标识目标activity。与下面的resultCode功能一致,感觉Android为了保证数据的严格一致性特地设置了两把锁,来保证数据的发送和目的地的严格一致性。

  onActivityResult原型如下:

onActivityResult(int requestCode, int resultCode, Intent data);
  • requestCode:用于与startActivityForResult中的requestCode值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。
  • resultCode:由子Activity通过其setResult方法返回。适用于多个activity都返回数据时,来标识到底是哪一个activity返回的值。
  • data:它是一个Intent对象,带有返回的数据。可以通过data.getXxxExtra方法来获取指定数据类型的数据。

  setResult原型如下:

setResult(int resultCode, Intent data);

在目的界面调用这个方法可以把数据返回至上一个Activity

  • resultCode:当Activity结束时,resultCode将归还至onActivityResult中。
  • data:它是一个Intent对象,也是返回给上一个Activity的数据,要使用putExtra方法装载数据。

  MainActivity.java如下:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button_first);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Main3Activity.class);
                int requestCode = 0x00;
                startActivityForResult(intent, requestCode);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if ((requestCode == 0x00) && (resultCode == 0x12)) {
            Bundle bundle = data.getExtras();
            String name = bundle.getString("name");
            String password = bundle.getString("password");
            Toast.makeText(MainActivity.this, name + " " + password, Toast.LENGTH_SHORT).show();
        }
    }
}

Main3Activity.java如下:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class Main3Activity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        Button button = findViewById(R.id.button_close);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = getIntent();
                Bundle bundle = new Bundle();
                bundle.putString("name", "fuxinzi");
                bundle.putString("password", "85056257");
                intent.putExtras(bundle);
                setResult(0x12, intent);
                finish();
            }
        });
    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值