zoukankan      html  css  js  c++  java
  • Activity组件(四):通过requestCode和resultCode来实现Activity间的数据回传

    一、什么是数据回传

    开发时,通过一个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);
        }
    
    
    }
  • 相关阅读:
    将eclipse的编码设置成UTF-8
    git提交代码时报rejected
    Vue.js
    快速计算进制之间的转换
    android中canvas.drawText参数的介绍以及绘制一个文本居中的案例
    progressbar原始效果
    面试问题总结
    Android Material Design学习日志
    Android进阶之解决RecyclerView notifyItem闪屏问题
    Android TextView行间距解析
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12284049.html
Copyright © 2011-2022 走看看