第五章 模拟跳转充值界面以及requestCode和resultCode的解释 2.8

2022-09-07 15:03:13 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

1. requestCode和resultCode

  requestCode:由跳转前的界面定义,通过startActivityForResult()来将定义的intent(同时也代表着要跳转的界面)与requestCode绑定。接着复写onActivityResult(int requestCode, int resultCode, Intent data)来获取发生事件的界面。

  resultCode: 由跳转后的界面定义,通过setResult()来将跳转后界面的intent与resultCode绑定。此时跳转前的界面可通过resultCode来选择跳转后界面的intent(一般在判断某个具体的界面后使用)。

  本次例子中,假设点击充值按钮后的充值界面的requestCode == PAY_REQUEST_CODE == 1。接着设置点击充值成功后的resultCode == 2,取消充值为resultCode == 3。

2. MainActivity(跳转前界面)

代码语言:javascript复制
package com.example.infotransmission2;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * 数据回传
 * 点击充值按钮,跳转到第二个界面进行充值
 * 第二个界面进行充值,充值完成以后告诉第一个界面结果,包括充值成功或者失败
 *
 */
public class MainActivity extends AppCompatActivity {

    private Button mBtnRecharge;
    private TextView mTextPayResult;
    private static int PAY_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Refactor-Extract Method
        initView();

        initListener();
    }

    private void initListener() {
        mBtnRecharge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 设置一个点击事件,跳转到第二个界面进行充值
                Intent intent = new Intent(MainActivity.this, PayActivity.class);
                // 第一步,使用startActivityForResult代替原来的startActivity,表明跳转到别的页面后(该界面与requestCode绑定),
                // 等待该界面的相关返回码
                startActivityForResult(intent,1);
            }
        });
    }

    /**
     * 第二步,复写方法,返回的结果就会在这里回调
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 通过requestCode来判断返回的Activity是哪一个
        if (requestCode == PAY_REQUEST_CODE) {
            String resultContent = null;
            if (resultCode == 2) {
                // 充值成功
                resultContent = data.getStringExtra("resultContent");
            }
            else if(resultCode == 3){
                // 充值失败
                resultContent = data.getStringExtra("resultContent");
            }
            mTextPayResult.setText(resultContent);
        }
    }

    /**
     * 初始化控件
     */
    private void initView() {
        mBtnRecharge = (Button) this.findViewById(R.id.btn_recharge);
        mTextPayResult = (TextView) this.findViewById(R.id.pay_result);
    }
}

3. PayActivity(跳转后的界面)

代码语言:javascript复制
 1 package com.example.infotransmission2;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.content.Intent;
 6 import android.os.Bundle;
 7 import android.text.TextUtils;
 8 import android.view.View;
 9 import android.widget.Button;
10 import android.widget.EditText;
11 import android.widget.Toast;
12 
13 public class PayActivity extends AppCompatActivity {
14 
15     private EditText mEditInput;
16     private Button mBtnChargein;
17     private Button mBtnCancelCharge;
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_pay);
23 
24         initView();
25 
26         initListener();
27     }
28 
29     private void initListener() {
30         mBtnCancelCharge.setOnClickListener(new View.OnClickListener() {
31             @Override
32             public void onClick(View v) {
33                 handlerCancel();
34             }
35         });
36 
37         mBtnChargein.setOnClickListener(new View.OnClickListener() {
38             @Override
39             public void onClick(View v) {
40                 handlerPay();
41             }
42         });
43     }
44 
45     private void handlerCancel() {
46         Intent intent = new Intent();
47         intent.putExtra("resultContent", "充值失败!");
48         // 将该intent与设定的resultCode值相绑定
49         setResult(3, intent);
50         finish();
51     }
52 
53     private void handlerPay() {
54         String payNumber = mEditInput.getText().toString().trim();
55         if (TextUtils.isEmpty(payNumber)) {
56             Toast.makeText(this, "请输入充值金额", Toast.LENGTH_SHORT).show();
57             return;
58         }
59 
60         // 进行充值(模拟,需要网络编程)
61         // 将该intent与设定的resultCode值相绑定
62         Intent intent = new Intent();
63         intent.putExtra("resultContent", "充值成功!");
64         setResult(2, intent);
65         finish();
66     }
67 
68     private void initView() {
69         mEditInput = (EditText) this.findViewById(R.id.edit_input);
70         mBtnChargein = (Button) this.findViewById(R.id.btn_chargein);
71         mBtnCancelCharge = (Button) this.findViewById(R.id.btn_cancelCharge);
72     }
73 
74 }

4. activity_main

代码语言:javascript复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击充值"
        android:id="@ id/btn_recharge"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@ id/pay_result"/>

</LinearLayout>

5. activity_pay

代码语言:javascript复制
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:app="http://schemas.android.com/apk/res-auto"
 5     xmlns:tools="http://schemas.android.com/tools"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     tools:context=".PayActivity"
 9     android:orientation="vertical">
10 
11     <EditText
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:hint="请输入充值金额"
15         android:id="@ id/edit_input"
16         android:inputType="number"
17         android:textSize="30sp"/>
18 
19     <Button
20         android:layout_width="match_parent"
21         android:layout_height="wrap_content"
22         android:id="@ id/btn_chargein"
23         android:text="确定充值"/>
24 
25     <Button
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:text="取消充值"
29         android:id="@ id/btn_cancelCharge"/>
30 
31 </LinearLayout>

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155759.html原文链接:https://javaforall.cn

0 人点赞