一、什么是數據回傳
開發時,通過一個Activity來調用另一個Activity,當用戶在第二個Activity中操作完成后,自動返回第一個Activity並將數據傳給第一個Activity,從而使得第一個Activity可以獲取第二個Activity的數據。
在第一個Activity界面中,通過startActivityForResult()來啟動第二個Activity界面,在第二個界面中將數據通過setResult()回傳,在第一個Activity中重寫onActivityResult()方法。
requestCode:代表了啟動Activity的請求碼,用於標識請求來源,進而判斷這個返回的數據的路徑,從哪里開始,經過哪里,又回到這里。
resultCode:通過結果碼在onActivityResult()方法進行判斷,用來區分結果
二、實現充值的數據回傳
點擊按鈕進入充值頁面


直接點擊確認充值,判斷數據為空

輸入充值金額

點擊確認充值

再次點擊按鈕進入充值界面

點擊取消充值

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activityforresultdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".PayActivity"/> </application> </manifest>
activity_main.xml
<?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:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/recharge_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="點擊進行充值" /> <TextView android:id="@+id/pay_result" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="match_parent"/> </LinearLayout>
activity_pay.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:text="充值界面" android:textSize="30sp" android:layout_marginTop="40dp" android:layout_gravity="center" android:layout_height="wrap_content"/> <EditText android:id="@+id/pay_input_box" android:layout_width="match_parent" android:layout_marginTop="30dp" android:hint="請輸入充值金額" android:inputType="number" android:maxLines="1" android:layout_height="wrap_content"/> <RelativeLayout android:layout_width="match_parent" android:layout_marginTop="20dp" android:layout_height="match_parent"> <Button android:id="@+id/start_pay_btn" android:layout_width="wrap_content" android:layout_marginLeft="40dp" android:text="確認充值" android:layout_height="wrap_content"/> <Button android:id="@+id/cancel_pay_btn" android:layout_width="wrap_content" android:layout_marginRight="40dp" android:layout_alignParentRight="true" android:text="取消充值" android:layout_height="wrap_content"/> </RelativeLayout> </LinearLayout>
MainActivity.java
package com.example.activityforresultdemo; 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 mRechargeBtn; private TextView mPayResult; private static final int PAY_RESULT_CODE =1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initListener(); } private void initListener() { mRechargeBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //設置點擊事件 Intent intent =new Intent(MainActivity.this,PayActivity.class); //使用startActivityForResult來替代原來的startActivity startActivityForResult(intent,PAY_RESULT_CODE); } }); } /** * 初始化控件 */ private void initView() { mRechargeBtn = (Button) this.findViewById(R.id.recharge_btn); mPayResult =(TextView) this.findViewById(R.id.pay_result); } /** * 返回的結果在這里回調 * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String resultContent = null; //當我們判斷這個請求碼的時候,就知道,這是充值界面返回的結果 if (requestCode==PAY_RESULT_CODE) { if(resultCode==2){ //充值成功 resultContent=data.getStringExtra("resultContent"); }else if(resultCode==3){ //充值被取消 resultContent=data.getStringExtra("resultContent"); } mPayResult.setText(resultContent); } } }
PayActivity.java
package com.example.activityforresultdemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.Nullable; public class PayActivity extends Activity { private EditText mInoutBox; private Button mStartPayBtn; private Button mCancelPayBtn; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pay); initView(); initListener(); } private void initListener() { mStartPayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handlerPay(); } }); mCancelPayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handlerCancel(); } }); } private void handlerCancel() { Intent intent =new Intent(); intent.putExtra("resultContent","充值已被取消"); setResult( 3,intent); finish(); } private void handlerPay() { String paynumber=mInoutBox.getText().toString().trim(); if (TextUtils.isEmpty(paynumber)) { Toast.makeText(PayActivity.this,"未輸入充值金額",Toast.LENGTH_SHORT).show(); return; } //充值成功 //setResult()有兩個重載方法,一個只有resultCode,另一個還有intent Intent intent =new Intent(); intent.putExtra("resultContent","成功充值"+paynumber+"元"); setResult(2,intent); finish(); } private void initView() { mInoutBox=(EditText) this.findViewById(R.id.pay_input_box); mStartPayBtn=(Button) this.findViewById(R.id.start_pay_btn); mCancelPayBtn=(Button) this.findViewById(R.id.cancel_pay_btn); } }
