IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 四大组件 -> 正文阅读

[移动开发]Android 四大组件

Android四大组件

1、Activity

1.1、 初始Activity

  1. Activity 是什么?

  2. Activity有什么作用?

    1. 用户和应用程序交互的接口
    2. 摆放各种空间的容器
  3. 怎样创建Activity?

    1. 继承Activity

    2. 重写onCreate()方法

    3. 为Activity提供布局xml文件

    4. 清单文件中配置

  • 创建OtherActivity类,并继承Activity类

    package com.tinno.createactivity;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import androidx.annotation.Nullable;
    
    /**
     * 演示创建Activity
     * 1、继承 Activity
     * 2、重写onCreate() 方法
     * 3、提供xml布局文件 需要在onCreate()方法中调用setContentView() 方法加载xml布局
     * 4、配置
     */
    public class OtherActivity extends Activity {
    
        /**
         * 表示当Activity被创建时回调的方法,由系统框架调用
         * Bundle 键为 string 的 map 集合
         * @param savedInstanceState
         */
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_other);
        }
    }
    
    
  • 为OtherActivity类提供布局文件xml文件activity_other.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/tv_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tv_show"
            android:textSize="25sp"
            android:textColor="#00AA00"/>
    
    </RelativeLayout>
    
  • 在配置文件中配置,使OtherActivity启动 AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.createactivity">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
    
                
            </activity>
    
            <!--
                 android:name=“需要配置的包名.类名 必选属性”
                 android:label="表示应用程序列表中程序图标下方的文字"
                 android:icon="表示应用程序的图标"
             -->
            <activity android:name=".OtherActivity"
                android:exported="true">
    
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
  • 启动服务 出现绿色文字 (我是OtherActivity

  • 两个Activity之间的跳转

    MainActivity.java ==> 使用意图进行跳转

    package com.tinno.createactivity;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        // 点击按钮启动OtherActivity
        public void onClick(View view){
            Intent intent = new Intent(MainActivity.this,OtherActivity.class);  //通过intent意图对象描述启动的Activity
            startActivity(intent);  // 启动
        }
    }
    

    MainActivity 的布局文件 activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击跳转"
            android:onClick="onClick"
            tools:ignore="OnClick" />
    
    </RelativeLayout>
    

    配置 AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.createactivity">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
    
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--
                 android:name=“需要配置的包名.类名 必选属性”
                 android:label="表示应用程序列表中程序图标下方的文字"
                 android:icon="表示应用程序的图标"
             -->
            <activity android:name=".OtherActivity">
    
    
            </activity>
        </application>
    
    </manifest>
    
  • 启动服务

    点击跳转 --> 显示 我是OtherActivity

在这里插入图片描述

在这里插入图片描述

1.2 、Activity的生命周期

  1. 什么是生命周期?
  2. 研究Activity的生命周期有什么作用?
  3. Activity生命周期的执行顺序?
  4. 横竖屏切换时Activity生命周期的如何变化?

1、Activiy生命周期的方法

MethodDescriptionKillableNext
onCreate当启动新的Activity的时候调用NoonStart()
onStart当Activity对用户即将可见时调用NoonResume()
or onStop()
onResume当Activity界面可与用户交互时调用NoonPause()
onPause当系统要启动一个其他的Activity时调用,用户保存当前数据YesonResume()
or onStop()
onStop该Activity已经不可见时调用YesonRestart()
or onDestroy()
onRestart重新启动Activity时调用(此方法是重启留在缓存中的Activity)NoonStart()
onDestroy当Activity被finish或手机内存不足被销毁时候调用Yesnothing
  1. onCreate():表示 activity 被创建调用的方法
  2. onStart():表示activity能够被用户看到时回调的方法
  3. onResume():表示activity获取用户焦点时 能与用户交互时调用
  4. onPause():表示activity失去用户焦点时回调的方法
  5. onStop():表示activity被完全遮挡时回调的方法
  6. onRestart():表示activity处于停止状态重新被启动时回调的方法
  7. onDestroy():表示activity被销毁时回调的方法

2、Activity生命周期执行顺序

在这里插入图片描述

3、横竖屏切换时Activity生命周期如何变化?

默认情况下 Activity 会关闭并且重新启动

  1. 表示设置activity固定方向: android:screenOrientation="portrait"
  2. 表示activity横竖屏切换时不会调用生命周期函数 (4.0版本之后)

设置 android:configChanges 属性 --> orientation、keyboardHidden、screenSize 多个属性值用 | 分隔

<activity android:name=".OtherActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">

</activity>

1.3、Activity之间的传值

  1. Activity之间通过Intent传值
  2. Activity之间通过Bundle传值
  3. 使用Application全局对象传值
  4. 启动Activity回传数据

1.3.1、Activity之间通过 Intent 传值

使用putExtra() 进行发送方的数据传递

getStringExtra()、getIntExtra()、getCharExtra() … 等方法进行接收方的数据获取

发送方:

? 以 key - value 对的形式存储需要传递的数据

接收方:

? 获取激活的 Intent 对象,根据 key 获取传递数据

  1. 定义两个Activity类,并为连个Activity类编写布局文件:

    MainActivity.java

    package com.tinno.activitypassvalue;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    /**
     * 演示activity之间通过 Intent 传值
     */
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        // 点击按钮传递数据到指定的 activity 中
        public void send(View view){
            Intent intent = new Intent(this,ResultActivity.class);
            //putExtra(String key,value) key表示唯一性标识当前值的健 , value为具体类型
            intent.putExtra("姓名","张三");
            intent.putExtra("性别",'男');
            intent.putExtra("年龄",30);
            intent.putExtra("成绩",98.5);
            intent.putExtra("bl",true);
            startActivity(intent);
        }
    }
    

    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:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="点击传值"
            android:onClick="send"/>
    
    </LinearLayout>
    

    ResultActivity.java

    package com.tinno.activitypassvalue;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    
    public class ResultActivity extends Activity {
        private TextView tv;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_result);
    
            tv = (TextView) findViewById(R.id.tv_show);
            //1、获取激活组件的 Intent 对象
            Intent intent = getIntent();
            //2、根据 key 获取传递的数据
            String name = intent.getStringExtra("姓名");
            int age = intent.getIntExtra("年龄",0); //getIntExtra(表示获取数据的key,如果根据key没有获取数据显示的默认值)
            double score = intent.getDoubleExtra("成绩",0.0);
            char sex = intent.getCharExtra("性别",'男');
            boolean bl = intent.getBooleanExtra("bl",false);
            //3、将数据展示到 TextView控件中
            tv.setText("name: " + name + "\n age: " + age + "\n score: " + score + "\n sex: " + sex + "\n bl: " + bl);
        }
    }
    

    activity_result.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:id="@+id/tv_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:textColor="#AA0000"
            android:layout_gravity="center"
            android:text="这是ResultActivity的布局文件"/>
    </LinearLayout>
    
  2. 将 Activity 在 AndroidManifest.xml中进行注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.activitypassvalue">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".ResultActivity">
    
            </activity>
        </application>
    
    </manifest>
    
  3. 运行结果 :

    点击传值 按钮 --> 数据显示

在这里插入图片描述

1.3.2、Activity之间通过Bundle传值

1.3.2.1、数据传递方:
  1. 新建一个Bundle类
  2. Bundle类中 key - value 键值对的形式存储数据
  3. 创建一个 Intent 对象,将 Bundle 存入 Intent 对象
1.3.2.2、数据接收方
  1. 获取激活的 Intent 对象
  2. 获取传递的 Bundle 对象
  3. 根据 Bundle 中的 key 值获取指定的 value 值
1.3.2.3、步骤如 1.3.1
  1. **定义两个Activity类,并为连个Activity类编写布局文件: **

    MainActivity.java

    package com.tinno.activitypassvaluebundle;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    /**
     * 演示采用Bundle进行传值
     */
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        // 点击按钮通过 Bundler 将数据传递到目标 activity
        public void send(View view){
            //1、创建 intent 意图对象
            Intent intent = new Intent(this,ResultActivity.class);
            //2、创建 bundle 对象,用来存储需要传递的数据
            Bundle bundle = new Bundle();
            //3、将需要传递的数据存储到 Bundle 对象中
            bundle.putString("name","李四");
            bundle.putInt("age",28);
            bundle.putDouble("score",95.6);
            bundle.putChar("sex",'女');
            //4、将 bundle 对象存储到 intent 对象中
            intent.putExtras(bundle);
            //5、启动activity
            startActivity(intent);
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击传值"
            android:onClick="send"/>
    </RelativeLayout>
    

    ResultActivity.java

    package com.tinno.activitypassvaluebundle;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    
    public class ResultActivity extends Activity {
        private TextView tv_showInfo;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_result);
    
            tv_showInfo = (TextView) findViewById(R.id.tv_showInfo);
            //1、获取激活的 Intent 对象
            Intent intent = getIntent();
            //2、获取传递的 bundle 对象
            Bundle bundle = intent.getExtras();
            //3、在 bundle 根据 key 获取具体的数据
            String name = bundle.getString("name");
            int age = bundle.getInt("age");
            double score = bundle.getDouble("score");
            char sex = bundle.getChar("sex");
            //4、将数据展示到 TextView 中
            tv_showInfo.setText("name: " + name +"\n age: " + age + "\n score: " + score +"\n sex: " + sex);
        }
    }
    

    activity_result.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:id="@+id/tv_showInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="32sp"
            android:textColor="#AA00AA"
            android:textStyle="bold"/>
    </LinearLayout>
    
  2. 将 Activity 在 AndroidManifest.xml中进行注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.activitypassvaluebundle">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".ResultActivity">
    
            </activity>
        </application>
    
    </manifest>
    
  3. 运行结果 :

    点击传值 按钮 --> 数据显示
    在这里插入图片描述

1.3.3、使用 Application 全局对象传值

发送方

? 将数据存储到 Application

接收方

? 读取 Application 中的数据

注意: Application 需要注册和配置

1、创建类继承MyAppliction继承Appliction,将需要存储的数据定义为application的属性
2、在发送的activity 中发送数据
3、接收的 activity 中,获取数据操作
4、需要进行响应的注册(在AndroidManifest.xml文件中进行注册)

  1. 定义两个Activity类,并为两个Activity类编写布局文件:

    MainActivity.java

    package com.tinno.activitypassvalueappliaction;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.app.Application;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    /**
     * 演示 Application 传递数据
     *
     * 1、创建类继承MyAppliction继承Appliction,将需要存储的数据定义为application的属性
     * 2、在发送的activity 中发送数据
     * 3、接收的 activity 中,获取数据操作
     * 4、需要进行响应的注册(在AndroidManifest.xml文件中进行注册)
     *      <application
     *         android:name="自定义Application包名.类名"
     *        />
     */
    public class MainActivity extends AppCompatActivity {
    
        private MyApplication application;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /**
         * 点击按钮将数据存储到Application中
         * @param view
         */
        public void click(View view){
            application = (MyApplication) getApplication();
            application.setName("小明");
            application.setAge(18);
    
            startActivity(new Intent(this,ResultActivity.class));
        }
    }
    

    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:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击传值"
            android:onClick="click"
            android:layout_gravity="center"/>
    
    </LinearLayout>
    

    ResultActivity.java

    package com.tinno.activitypassvalueappliaction;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    
    public class ResultActivity extends Activity {
        private TextView tv;
        private MyApplication application;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_result);
    
            tv = (TextView) findViewById(R.id.tv);
    
            application = (MyApplication) getApplication();
            String name = application.getName();
            int age = application.getAge();
    
            tv.setText("name: " + name + "\n age: " + age);
        }
    }
    

    activity_result.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:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#00AA00"
            android:textSize="32sp"
            android:text="你好"
            android:layout_gravity="center"/>
    </LinearLayout>
    
  2. 定义一个自定义类 MyApplication 继承自 Application,用来作为传值的实体类

    MyApplication

    package com.tinno.activitypassvalueappliaction;
    
    import android.app.Application;
    
    public class MyApplication extends Application {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
  3. AndroidManifest.xml对目标Activity进行注册和 application 进行注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.activitypassvalueappliaction">
    
        <application
            android:name=".MyApplication"
            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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".ResultActivity">
    
            </activity>
        </application>
    
    </manifest>
    
  4. 结果 -> 点击传值 按钮跳转到 ResultActivity中,并获取数据

在这里插入图片描述

1.3.4、启动Activity回传数据

在这里插入图片描述

  1. 定义两个Activity类,并为两个Activity类编写布局文件:

    MainActivity.java

    package com.tinno.activitypassforresult;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    
    /**
     * 启动Activity回传数据
     */
    public class MainActivity extends AppCompatActivity {
    
        private EditText et_num1,et_num2;
        private TextView tv_result;
        private static final int REQUEST_CODE=1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 获取两个输入框的内容和结果框的内容
            et_num1 = (EditText) findViewById(R.id.et_num1);
            et_num2 = (EditText) findViewById(R.id.et_num2);
            tv_result = (TextView) findViewById(R.id.et_res);
        }
    
        // 点击按钮发送数据到目标的 activity
        public void onClick(View view){
            Intent intent = new Intent(this,ResultActivity.class);
            String num1 = et_num1.getText().toString();
            String num2 = et_num2.getText().toString();
            intent.putExtra("num1",num1);
            intent.putExtra("num2",num2);
            startActivityForResult(intent,REQUEST_CODE);    //startActivityForResult(请求的Intent对象,大于0的整数请求码)
        }
    
        /**
         * 用来处理setResult()方法回传的数据
         * @param requestCode   本次请求的请求码
         * @param resultCode    结果码
         * @param data          回传的意图对象
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){
                String result = data.getStringExtra("info");
                Log.e("xx", "onActivityResult: " + result );
                tv_result.setText(result);
            }
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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">
    
        <EditText
            android:id="@+id/et_num1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:textSize="20sp"
            android:ems="3"/>
    
        <TextView
            android:id="@+id/et_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/et_num1"
            android:layout_alignBottom="@id/et_num1"
            android:layout_toRightOf="@id/et_num1"
            android:textSize="20sp"
            android:text="+"/>
    
        <EditText
            android:id="@+id/et_num2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/et_add"
            android:layout_alignBottom="@id/et_add"
            android:layout_toRightOf="@id/et_add"
            android:textSize="20sp"
            android:ems="3"/>
    
        <TextView
            android:id="@+id/et_amount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/et_num2"
            android:layout_alignBottom="@id/et_num2"
            android:layout_toRightOf="@id/et_num2"
            android:textSize="20sp"
            android:text="="/>
    
        <TextView
            android:id="@+id/et_res"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/et_amount"
            android:layout_alignBottom="@id/et_amount"
            android:layout_toRightOf="@id/et_amount"
            android:textSize="20sp"
            android:text=""/>
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/et_res"
            android:layout_marginTop="22dp"
            android:layout_toRightOf="@id/et_res"
            android:onClick="onClick"
            android:text="计算结果"/>
    
    </RelativeLayout>
    

    ResultActivity.java

    package com.tinno.activitypassforresult;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    
    public class ResultActivity extends Activity {
        private TextView tv_num1,tv_num2;
        private EditText et_result;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_result);
    
            tv_num1 = (TextView) findViewById(R.id.textView1);
            tv_num2 = (TextView) findViewById(R.id.textView3);
    
            et_result = (EditText) findViewById(R.id.editText1);
    
            Intent intent = getIntent();
            tv_num1.setText(intent.getStringExtra("num1"));
            tv_num2.setText(intent.getStringExtra("num2"));
        }
    
        // 点击按钮将数据进行回传到发送 activity的对象中
        public void send(View view){
            String result = et_result.getText().toString(); //获取结果数据
            Log.e("xx", "获取的结果为: " + result );
            Intent intent = new Intent();
            intent.putExtra("info",result);
            setResult(Activity.RESULT_OK,intent);   //setResult(请求的结果码,表示回传的数据的intent对象)
            ResultActivity.this.finish();   //关闭当前 activity
        }
    }
    

    activity_result.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="19dp"
            android:textSize="20sp"
            android:text="*"/>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/textView1"
            android:layout_marginLeft="28dp"
            android:layout_toRightOf="@id/textView1"
            android:textSize="20sp"
            android:text="+"/>
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/textView2"
            android:layout_marginLeft="28dp"
            android:layout_toRightOf="@id/textView2"
            android:textSize="20sp"
            android:text="*"/>
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/textView3"
            android:layout_marginLeft="28dp"
            android:layout_toRightOf="@id/textView3"
            android:textSize="20sp"
            android:text="="/>
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/textView4"
            android:layout_alignParentRight="true"
            android:layout_marginRight="32dp"
            android:ems="3"/>
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@id/editText1"
            android:layout_below="@id/editText1"
            android:layout_marginTop="30dp"
            android:onClick="send"
            android:text="回传数据"/>
    </RelativeLayout>
    
  2. Androidmanifest.xml进行注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.activitypassforresult">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".ResultActivity">
    
            </activity>
        </application>
    
    </manifest>
    
  3. 结果 ==> 在MainActivity中输入两个数字,点击计算结果按钮 跳转到 ResultActivity ,在ResultActivity进行结果计算,点击回传数据按钮,将数据传回到 MainActivity 中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.4、Task、Back Stack

Task:

多个Activity一起完成一项工作时,它们的集合被称作一个Task。

Back Stack:

一个Task的所有的Activity被放置在一个stack结构中,根据他们启动的顺序被添加。Stack不会进行重新排列,只会在打开新Activity时添加其到栈顶,或finish时从栈顶移除。所以Activity在此stack中表现为“last in,fisrt out”,因为上述特点,多个Activity在打开和关闭时,stack表现出“回退栈”这样的效果

https://blog.csdn.net/ckq5254/article/details/79474827

  1. 定义两个Activity类,并为两个Activity类编写布局文件:

    MainActivity.java

    package com.tinno.taskdemo;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    /**
     * 演示Task
     */
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view){
            startActivity(new Intent(this,OtherActivity.class));
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击启动OtherActivity"
            android:layout_alignParentRight="true"
            android:layout_alignParentLeft="true"
            android:onClick="click"/>
    
    </RelativeLayout>
    

    OtherActivity.java

    package com.tinno.taskdemo;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.view.View;
    
    import androidx.annotation.Nullable;
    
    public class OtherActivity extends Activity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_other);
        }
    
        /**
         * 点击按钮打开发送短信的界面
         * @param view
         */
        public void click(View view){
            // 打开设置页面 Settings.ACTION_SETTINGS
            // 打开短信界面,发送短信 Intent.ACTION_SENDTO,Uri.parse("smsto:10000"))
            Intent intent = new Intent(Settings.ACTION_SETTINGS);
            startActivity(intent);
        }
    }
    

    activity_other.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击启动设置页面"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:onClick="click"/>
    </RelativeLayout>
    
  2. Androidmanifest.xml进行注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tinno.taskdemo">
    
        <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/Theme.TencentClass">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".OtherActivity">
    
            </activity>
        </application>
    
    </manifest>
    
  3. 结果 点击启动OTHERACTIVITY按钮跳转到 OtherActivity中,在点击 点击启动设置页面 按钮 跳转到 系统设置页面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:32:44  更:2022-04-09 18:36:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:00:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码