当前位置:主页 > 移动开发 > Android代码 >

Android四大组件之Activity详细介绍

时间:2022-08-13 12:17:37 | 栏目:Android代码 | 点击:

理论概述

Activity的理解

Activity的定义

Activity,字面翻译为活动,他是Android定义的四大应用组件之一,也是最重要的用的最多的。

一个应用有多个界面,也就是包含多个Activity

Activity的作用

用来提供一个能够让用户操作并与之交互的界面

一个Activity相当于一个容器,用于存放各种控件的容器,也可以理解为是与用户交互的接口

类比Activity与Servlet

Intent的理解

Intent,直译为意图,也就是你想要做什么或者想要去哪

Intent(Activity, Service, BroadcastReceiver三个组件间通信的信使),但不是Android中的四大组件之一。

例如:我要在Activity中启动另外一个Activity,就必须使用Intent对象。Intent对象还可以携带数据

Intent的分类

显式: 明确指定的目标组件的意图(也就是说很明确知道要做什么去或者去哪里),当操作当前应用自己的组件的时候使用显式Intent

隐式: 没有明确指定目标组件的意图(也就是说不明确知道要做什么去或者去哪里),操作其它应用自己的组件的时候使用隐式Intent

Intent的使用

创建

显式: Intent(Context context, Class activityClass),使用这样的构造函数创建的Intent对象就是显式的

隐式: Intent(String action) //与Activity与的action匹配,使用这样的构造函数创建的Intent对象就是隐式的,例如分享功能,也是启动另外一个Activity,但是到底启动哪个Activity,还不知道,由用户选择

携带数据

额外: putExtra(String key, Xxx value) 内部用map容器保存

有特定前缀: setData(Uri data) //tel:123123, smsto:123123

读取数据

额外:Xxx getXxxExtra(String key)

有特定前缀: Uri getData()

IntentFilter的理解

在配置Activity时,可以为Activity指定一个IntentFilter的配置

如果你的Activity希望其他应用能访问到,需要配置<intent-filter>

如果这个Activity是被内部应用的某个Activity来访问的,就不需要配置<intent-filter>

如果想启动其他应用界面你必须用隐式的intent,且目标界面Activity配置了<intent-filter>

相关的API

设置点击监听

Activity中添加监听

view.setOnClickListener(OnClickListener listener);

layout中添加监听

layout中

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="MainStart2"
    android:text="带回调启动"/>

Activity中

package com.example.activity_01;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void MainStart2(View view) {
        Toast.makeText(this, "带回调启动", Toast.LENGTH_SHORT).show();
    }
}

设置长按监听

view.setOnLongClickListener(OnLongClickListener listener);

Activity的开发

开发流程

1. 界面布局
2. 实现Activity的功能
	1). 定义所有需要操作的视图对象并初始化
	2). 给视图设置监听
	3). 在回调方法中实现逻辑
3. 实现一般启动
	1). 定义好界面二
		1). 布局
		2). 定义Activity类
		3). 配置
		4). 重写onCreate(), 并加载布局
	2). 启动界面二
		1). 创建Intent对象(显式)
		2). 通过intent携带额外数据
		3). 启动Activity
		4). 得到intent对象
		5). 通过intent读取额外数据
		6). 显示到EditText
4. 实现一般返回:
	1). 在显示Second界面时, Main界面其实在, 只是被盖住了
	2). 关闭当前界面: finish()

Activity的使用

界面布局

实现Activity的功能

1). 定义所有需要操作的视图对象并初始化
2). 给视图设置监听
3). 在回调方法中实现逻辑

package com.example.activity;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
import com.google.android.material.textfield.TextInputEditText;
 
public class MainActivity extends Activity implements View.OnClickListener {
 
    private TextInputEditText main_message;
    private Button btn_main_start1;
    private Button btn_main_start2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // 视图对象并初始化
        main_message = findViewById(R.id.et_main_message);
        btn_main_start1 = findViewById(R.id.btn_main_start1);
        btn_main_start2 = findViewById(R.id.btn_main_start2);
 
        // 给视图设置监听
        btn_main_start1.setOnClickListener(this);
        btn_main_start2.setOnClickListener(this);
    }
 
    // 在回调方法中实现逻辑
    @Override
    public void onClick(View view) { // view 就是发生(操作的)事件的视图对象
        if(view == btn_main_start1) {
            Toast.makeText(this, "一般启动", Toast.LENGTH_SHORT).show();
        } else if (view == btn_main_start2) {
            Toast.makeText(this, "带回调启动", Toast.LENGTH_SHORT).show();
        }
    }
}

实现一般启动

1). 定义好界面二
1). 布局
2). 定义Activity类
3). 配置
4). 重写onCreate(), 并加载布局
2). 启动界面二
1). 创建Intent对象(显式)
2). 通过intent携带额外数据
3). 启动Activity
4). 得到intent对象
5). 通过intent读取额外数据
6). 显示到TextInputEditText

配置清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activity_01">
 
    <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.Activity_01">
        <!--
            android:name: 配置全类名,com.example.activity_01.SecondActivity,可以将包名省略
            android:label: 定义一个Activity的标题,可以引用一个字符串(必须在string.xml中有定义),也可以直接写字符串,但不建议
            SecondActivity是由MainActivity(内部Activity)来启动访问的,所以SecondActivity不需要配置<intent-filter>
        -->
        <activity
            android:name=".SecondActivity"
            android:label="@string/second_activity_label"
            android:exported="false" />
        <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>
    </application>
 
</manifest>

 总结

您可能感兴趣的文章:

相关文章