第五章 模擬跳轉充值界面以及requestCode和resultCode的解釋 2.8


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(跳轉前界面)

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(跳轉后的界面)

 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

<?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

 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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM