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);
        }
    
    
    }
  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12284049.html
Copyright © 2011-2022 走看看