在Android系统中,每个App应用通常都由多个界面组成,一个界面就是一个Activity,这些界面进行跳转,实际上就是Activity之间的跳转。跳转需要用到的Intent组件,通过Intent开启新的Activity来实现界面跳转。
理论篇
Intent
Intent的属性有动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)和扩展(Extra),其中最常用的是Action属性.
例如:
Intent.ACTION_MAIN:应用程序入口;
Intent.ACTION_SEND:发送短信、发送邮件等
Intent.ACTION_VIEW:显示数据给用户,如浏览网页、显示应用、寻找应用等
Intent.ACTION_WEB_SEARCH:从谷歌搜索内容
Intent.ACTION_DIAL:拨打电话
Intent.ACTION_PICK:打开联系人列表
Intent分类
显示Intent
显式Intent可以直接通过名称开启指定的目标组件,通过其构造方法Intent(Context paokageContext,Class<?> class)来实现
- 第一个参数Context表示当前的Activity对象,这里使用this即可。
- 第二个参数Class表示要启动的目标Activity
通过这个方法创建一个Intent对象,然后将该对象传递给Activity的startActivity()方法,即可启动目标组件。示例代码如下:
Intent intent = new Intent(this,Activity02.class);
startActivity(intent);
Android 系统一般通过一个已经启动的Activity对象,调用其startActivity()或startActivityForResult()方法来启动另一个Activity,这个过程中传递的参数就是一个显式Intent对象
隐式Intent
隐式Intent相比显式Intent来说更为抽象,它并没有明确指定要开启哪个目标组件,而是指定action和category等属性信息,系统根据这些信息进行分析,然后寻找Activity。各种系统功能的调用,如调用通讯录、查看通话记录、发短信、google搜索等,就适合采用隐式Intent来开启。
Uri uri = Uri.parse("http://www.baidu.com");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);
Activity之间的跳转
Intent组件是Android系统的一种运行时的绑定机制,在Android的应用程序中,不管是界面切换,还是传递数据,或是调用外部程序,都可能要用到Intent。
Bundle类
Bundle类是为字符串与某组件对象建立映射关系的组件。它与Intent配合使用,可在不同的Activity之间传递数据。Bundle类的常用方法如下。
putString(String key,String value):把字符串用键值对的形式存放到Bundle对象中。
remove(String key):移除指定key的值
getString(String key):获取指定key的字符
应用Intent在不同的Activity之间传递数据
在界面的Activity A端
- 创建Intent对象和Bundle对象
- 为Intent指定要跳转的界面,并用Bundle存放键值对数据
- 将Bundle对象传递给Intent
Intent intent = new Intent();
Bundle bundle = new Bundle();
Intent.setClass(<MainActivity.this,secondActivity.class);
bundle.putString("标记1","要传递的消息内容");
Intent.putExtras(bundle);
在另一界面的Activity B端
- 从Intent中获取Bundle对象。
- 从Bundle对象中按键值对的键名获取对应的数据值
Bundle bb = this.getIntent().getString().getExtras();
String str = bb.getString("标记1");
不使用Bundle对象,Intent一样可以保存数据,并传递到下一个Activity。使用Bundle与Intent配合,会使得程序的逻辑更加清晰。
实践篇–界面之间传递数据
测试效果
第二个页面中这两个相互切换的哟!上一篇博文比较基础主要实现两页面切换的基础操作
Android|Activity类理论篇(附用户界面切换案例)
实现步骤
创建新项目 My sixApplication
点进Project—>Empty Activity—>然后名字改下,finish即可。成功之后,点击箭头运行程序。
程序正常可以跑成功hello world字样,下面我们继续
布局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"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这里是MainActivity"
android:layout_marginTop="20px"
android:layout_centerHorizontal="true"
android:id="@+id/txt2" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txt2"
android:layout_centerHorizontal="true"
android:id="@+id/edit"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/edit"
android:layout_centerHorizontal="true"
android:text="输入文本,跳转到下一个页面"
android:id="@+id/btn"/>
</RelativeLayout>
RelativeLayout详解
除了对width与height做简单的设置外,设置方向为垂直。
TextView详解
主要是显示文字的,非编辑的哟!基本设置外,相对布局让其居中,并设置外边距Top 20单位。id一定要设置,为了给后面坐下参照
EditText详解
width与height和id基本操作外,也是居中,外边距20单位。在TextView底部
android:layout_below="@id/txt2"
Button详解
width与height和id基本操作外,也是居中,外边距20单位。在EditText底部
创建空类做第二个界面
右击app文件夹。箭头操作!一路默认下去直接finish
布局activity_main2.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"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="欢迎来到第二个页面"
android:layout_marginTop="20px"
android:layout_centerHorizontal="true"
android:id="@+id/txt1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt2"
android:layout_centerHorizontal="true"
android:layout_below="@id/txt1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txt2"
android:layout_centerHorizontal="true"
android:text="返回第一个页面"
android:id="@+id/btn2"/>
</RelativeLayout>
配置主界面java文件
主界面java文件名为MainActivity.java,因为之前理论讲得很透彻,我们要用Intent作为媒介进行操作,因此本java文件主要做两个方面东西:激活窗口,点击按钮激活另一个窗体。这里都用到了Intent和Bundle。
package com.example.mysixapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements View.OnClickListener {
Button btn;
EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText)findViewById(R.id.edit);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(this);
}
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putString("edit",edit.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
}
配置第二个界面java文件
其实第二个界面也有按钮做返回,所以也要click事件,激活获得id是基本保证。
package com.example.mysixapplication;
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;
import static com.example.mysixapplication.R.layout.activity_main2;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
Button btn2;
TextView txt2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_main2);
txt2 = (TextView)findViewById(R.id.txt2);
btn2 = (Button)findViewById((R.id.btn2));
Bundle bb = this.getIntent().getExtras();
String str = bb.getString("edit");
txt2.setText(str);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent2 = new Intent();
intent2.setClass(this,MainActivity.class);
startActivityForResult(intent2,0);
}
}
点击运行
程序可以正常运行
程序效果
程序效果就是之前的测试效果。
总结
在界面之间传递数据的时候,运用到Intent和Bundle。传递数据需要Intent作为媒介。因此程序整体实现步骤再次总结
- 创建新项目,跑通hello world
- 搭建主界面布局文件activity_main.xml
- 创建空类为第二个界面,一路默认完成
- 搭建次界面布局文件activity_main2.xml
- 配置主界面java文件
- 配置次界面java文件
- 程序运行,分享喜悦。
很高兴博文能帮助到大家!