Intent 传递数据 和 返回数据

Intent(意图)

Intent 是各 组件之间交互 的重要方式,一般用于启动活动、启动服务、发送广播等场景。
作用:
1、指明当前组件想要执行的动作
2、在不同组件之间传递数据

1、显示Intent(明确指出启动的活动,限定目标activity类名)

应用场景:一般用于应用内的组件之间跳转
1.1、第一个activity页面,传递数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//设置视图内容
        //初始化界面
        maccount = this.findViewById(R.id.account);
        mpassword = this.findViewById(R.id.password);
        mlogin = this.findViewById(R.id.login);
        //创建点击事件
        mlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: 登录点击了");
                String account = maccount.getText().toString().trim();
                if (TextUtils.isEmpty(account)) {
                    Toast.makeText(MainActivity.this, "请输入账户名", Toast.LENGTH_SHORT).show();
                    return;
                }
                String password = mpassword.getText().toString().trim();
                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(MainActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
                    return;
                }
                //将数据传到另个activity
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);//第一个参数:启动活动的上下文。第二个参数:要启动的目标活动
                intent.putExtra("account", account);//传递数据
                intent.putExtra("password", password);
                startActivity(intent);//startActivity()启动活动,实现跳转页面
            }
        });
    }

1.2、跳转到的activity页面,接收数据:

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        TextView info = findViewById(R.id.info);//找到控件
        Intent intent = getIntent();//接收intent
        String account = intent.getStringExtra("account");//接收数据
        String password = intent.getStringExtra("password");
        info.setText("账号:" + account + ",密码:" + password);
    }

2、隐式Intent(不明确指出启动的活动,必须匹配action 和category 标签内容)

应用场景:一般用于应用之间跳转。

AndroidManifest.xml 文件

        <activity android:name=".ThirdActivity">
            <intent-filter>//意图过滤
            //<action>和<category>中的内容,同时匹配Intent中的指定的action和category,这个活动才能相应这个Intent意图
                <action android:name="com.win.LOGIN_INFO"/>//指明当前活动可以相应这个action
                <category android:name="android.intent.category.DEFAULT"/>//附加信息。 DEFAULT默认界面
            </intent-filter>
        </activity>

2.1、第一个activity页面,传递数据。Intent 必须要匹配< action >和< category >标签中的内容。

                //隐式意图
                Intent intent1 = new Intent();
                intent1.setAction("com.win.LOGIN_INFO");//匹配<action>标签
                intent1.addCategory("android.intent.category.DEFAULT");//匹配<category>标签
                intent1.putExtra("account",account);//添加数据
                intent1.putExtra("password",password);
                startActivity(intent1);

2.2、第二个activity页面,接收数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        TextView info = findViewById(R.id.info);//找到这个活动控件
        Intent intent = getIntent();//接收intent
        String account = intent.getStringExtra("account");//接收数据
        String password = intent.getStringExtra("password");
        info.setText("account:"+account+",password:"+password);//将数据放到这个控件中
    }

Intent数据回传(startActivityForResult()方法)

1、MainActivity(第一个活动) 跳转到 PayActivity(第二个活动) 页面(使用startActivityForResult()方法启动第二个活动

        mbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, PayActivity.class);
                startActivityForResult()方法,启动活动
                // 第一个参数intent,第二个参数请求码(用于在之后的回调中判断数据的来源,只要是唯一值就可以)
                startActivityForResult(intent,1);
            }
        });

2、 PayActivity(第二个活动),点击事件和添加返回数据(setResult()方法)

        //给button设置点击事件
        mbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String payNum = meditText.getText().toString().trim();
                if (TextUtils.isEmpty(payNum)) {
                    Toast.makeText(PayActivity.this, "请输入充值金额", Toast.LENGTH_SHORT).show();
                    return;
                }
                Intent intent = new Intent();//传递数据的Intent
                intent.putExtra("resultContent", "充值成功");
                intent.putExtra("payNum",payNum);
                //setResult()一个参数向上个活动返回处理结果(RESULT_OK,RESULT_CANCELED),第二个参数:带有数据的intent
                setResult(RESULT_OK, intent);
                finish();//销毁当前活动
            }
        });

3、MainActivity(第一个活动)得到数据。(onActivityResult()方法)
步骤:requestCode(判断数据来源)–>resultCode(判断处理结果)–>data(从Intent中获取数据)

    //返回的结果会在这里回调
    //onActivityResult()方法:3个参数。requestCode:启动活动时传入的请求码。resultCode:返回数据时的处理结果。data:带数据的Intent
    //startActivityForResult()方法可能调用很多,但是都会回调到onActivityResult()方法中
    //requestCode(判断数据来源)-->resultCode(判断处理结果)-->data(从Intent中获取数据)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {//requestCode(判断数据来源)
            case 1:
                if (resultCode == RESULT_OK) {//resultCode(判断处理结果)
                    String resultContent = data.getStringExtra("resultContent");//data(从Intent中获取数据)
                    String resultContent1 = data.getStringExtra("payNum");//data(从Intent中获取数据)
                    mtextView.setText(resultContent+":"+resultContent1+"元");
                }
                break;
        }
    }
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值