zoukankan      html  css  js  c++  java
  • 一手遮天 Android

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - Activity: Activity 之间的跳转和数据传递

    示例如下:

    /activity/ActivityDemo3.java

    /**
     * Activity 之间的跳转和数据传递(本例用于演示父 activity)
     *
     * 通过 intent 打开其他 activity,通过 bundle 传递数据(bundle 的大小有限制,大概是不到 1 MB)
     * startActivity() 用于打开其他 activity
     * startActivityForResult() 用于打开其他 activity 并通过当前 activity 的 @Override onActivityResult() 接收返回结果
     */
    
    package com.webabcd.androiddemo.activity;
    
    import android.content.Intent;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    
    public class ActivityDemo3 extends AppCompatActivity {
    
        private TextView mTextView1;
        private Button mButton1;
        private Button mButton2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_activity_activitydemo3);
    
            mTextView1 = findViewById(R.id.textView1);
            mButton1 = findViewById(R.id.button1);
            mButton2 = findViewById(R.id.button2);
    
            sample();
        }
    
        private void sample() {
            // 启动另一个 activity 并传递数据,不接收返回结果
            mButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 实例化 intent(需要指定当前上下文,以及需要跳转到的 activity)
                    Intent intent = new Intent(ActivityDemo3.this, ActivityDemo3_2.class);
                    // intent.setClass(ActivityDemo3.this, ActivityDemo3_2.class);
    
                    // 设置需要传递的数据,此为简便写法,实际上是通过 bundle 对象来传递数据的(参见后面的注释部分)
                    intent.putExtra("param1", "webabcd");
                    intent.putExtra("param2", 100);
    
                    /*
                    // 构造 intent 的 bundle 对象,用于传递数据(与上面的两行代码所做的工作是一样的)
                    Bundle bundle = new Bundle();
                    bundle.putString("param1", "webabcd");
                    bundle.putInt("param2", 100);
                    intent.putExtras(bundle);
                    */
    
                    // startActivity() - 通过 intent 打开指定的 activity 并传递数据
                    startActivity(intent);
                }
            });
    
            // 启动另一个 activity 并传递数据,并接收返回结果
            mButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(ActivityDemo3.this, ActivityDemo3_2.class);
                    intent.putExtra("param1", "webabcd");
                    intent.putExtra("param2", 100);
    
                    // startActivityForResult() - 通过 intent 打开指定的 activity 并传递数据,让后通过当前 activity 的 @Override onActivityResult() 接收返回结果
                    //     第二个参数是整型的,会通过 @Override onActivityResult() 传递回来,用于区分当前结果是通过哪个 startActivityForResult() 返回的
                    startActivityForResult(intent, 123);
                }
            });
        }
    
        // 接收 startActivityForResult() 打开的 activity 返回的结果
        //     requestCode - 就是 startActivityForResult() 的第二个参数,用于区分当前结果是通过哪个 startActivityForResult() 返回的
        //     resultCode - 返回的结果代码
        //     data - 返回的结果数据
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            mTextView1.setText(String.format("requestCode:%d, resultCode:%d", requestCode, resultCode));
    
            if (data != null) {
                String p1 = data.getStringExtra("param1");
                int p2 = data.getIntExtra("param2", 0);
    
                mTextView1.append(String.format("
    接收到的返回数据 param1:%s, param2:%d", p1, p2));
            }
        }
    }
    
    

    activityActivityDemo3_2.java

    /**
     * Activity 之间的跳转和数据传递(本例用于演示子 activity)
     *
     * 通过 intent 打开其他 activity,通过 bundle 传递数据(bundle 的大小有限制,大概是不到 1 MB)
     * 通过 finish() 结束当前的 activity,如果需要返回结果则在 finish() 之前调用 setResult()
     */
    
    package com.webabcd.androiddemo.activity;
    
    import android.content.Intent;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    
    public class ActivityDemo3_2 extends AppCompatActivity {
    
        private TextView mTextView1;
        private Button mButton1;
        private Button mButton2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_activity_activitydemo3_2);
    
            mTextView1 = findViewById(R.id.textView1);
            mButton1 = findViewById(R.id.button1);
            mButton2 = findViewById(R.id.button2);
    
            sample();
        }
    
        private void sample() {
            // 获取父 activity 传递过来的数据,此为简便写法,实际上是通过 bundle 对象来接收数据的(参见后面的注释部分)
            Intent intent = this.getIntent();
            String p1 = intent.getStringExtra("param1");
            int p2 = intent.getIntExtra("param2", 0);
            /*
            // 获取 intent 的 bundle 对象,用于接收数据(与上面的两行代码所做的工作是一样的)
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                String p1 = bundle.getString("param1");
                int p2 = bundle.getInt("param2", 0);
            }
            */
            mTextView1.setText(String.format("接收到的数据 param1:%s, param2:%d", p1, p2));
    
            // 关闭,不返回结果
            mButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // isFinishing() - 判断当前 activity 是否在结束中
                    // finish() - 结束当前 activity
                    finish();
                }
            });
    
            // 关闭,并返回数据
            mButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("param1", "wanglei");
                    intent.putExtra("param2", 999);
    
                    // 返回数据给 activity
                    //     第 1 个参数 - 返回的结果代码
                    //     第 2 个参数 - 返回的结果数据
                    setResult(456, intent);
    
                    // isFinishing() - 判断当前 activity 是否在结束中
                    // finish() - 结束当前 activity
                    finish();
                }
            });
        }
    }
    
    

    /layout/activity_activity_activitydemo3.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="启动另一个 activity 并传递数据,不接收返回结果"/>
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="启动另一个 activity 并传递数据,并接收返回结果"/>
    
    </LinearLayout>
    
    

    /layout/activity_activity_activitydemo3_2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭,不返回结果"/>
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭,并返回数据"/>
    
    </LinearLayout>
    
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    [转]Flex PieChart
    Flash Builder 4 下载
    [转]Android如何防止apk程序被反编译
    [转]自定义Spinner五步走
    [转]coolpad 获得 root
    [转]c# .net 用程序画图 曲线图
    android ContentProvider 遭遇 failed to find provider info
    [转]如何把多个Android Project打包成一个APK
    android loading界面 及 处理
    [转]android中生成和使用jar 分享
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_activity_ActivityDemo3.html
Copyright © 2011-2022 走看看