Intend&Bundle理论篇(附界面之间传递数据案例)

在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文件
  • 程序运行,分享喜悦。

很高兴博文能帮助到大家!

原创文章 247 获赞 92 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/106112760