Android页面跳转(Intent)

这篇具有很好参考价值的文章主要介绍了Android页面跳转(Intent)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

显式四种跳转方式

        Intent intent = new Intent(MainActivity.this,HomeActivity.class);
        startActivity(intent);

        Intent intent = new Intent();
        intent.setClass(MainActivity.this,HomeActivity.class);
        startActivity(intent);

        Intent intent = new Intent();
        ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);
        intent.setComponent(componentName);
        startActivity(intent);

 startActivity(new Intent(MainActivity.this,HomeActivity.class));

布局+代码

布局

<?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"
    android:gravity="center">

    <Button
        android:id="@+id/bt_intentmain"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="跳过去"
        />
    <Button
        android:id="@+id/bt_intentOne"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="按钮一"
        />
    <Button
        android:id="@+id/bt_intentTwo"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="按钮二"
        />
    <Button
        android:id="@+id/bt_intentThree"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="按钮三"
        />

</LinearLayout>

代码

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private  Button mBtIntent,mBtIntentOne,mBtIntentTwo,mBtIntentThree;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d("TAG","onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mBtIntent.setOnClickListener(this);
        mBtIntentOne.setOnClickListener(this);
        mBtIntentTwo.setOnClickListener(this);
        mBtIntentThree.setOnClickListener(this);
        setTitle("页面A");


    }


    private  void initView(){
        mBtIntent = findViewById(R.id.bt_intentmain);
        mBtIntentOne = findViewById(R.id.bt_intentOne);
        mBtIntentTwo = findViewById(R.id.bt_intentTwo);
        mBtIntentThree = findViewById(R.id.bt_intentThree);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_intentmain:
                IntentOne();
                break;
            case R.id.bt_intentOne:
                IntentTwo();
                break;
            case R.id.bt_intentTwo:
                IntentThree();
                break;
            case R.id.bt_intentThree:
                IntentFour();
                break;
            default:
                break;
        }
    }



    private  void IntentOne(){
        Intent intent = new Intent(MainActivity.this,HomeActivity.class);
        startActivity(intent);
    }

    private  void IntentTwo(){
        Intent intent = new Intent();
        intent.setClass(MainActivity.this,HomeActivity.class);
        startActivity(intent);
    }

    private  void IntentThree(){
        Intent intent = new Intent();
        ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);
        intent.setComponent(componentName);
        startActivity(intent);

    }

    private  void IntentFour(){
        startActivity(new Intent(MainActivity.this,HomeActivity.class));
    }
}

效果

Android页面跳转(Intent)

隐式意图和隐式意图的跳转

隐式意图
没有明确指定组件名的Intent为隐式意图,系统会根据隐式意图中设置的动作(action)、类别(category)、数据UIL等来匹配最合适的组件。

首先在清单文件中使用意图过滤器设置活动的名字
< action android:name=“HomeActivity” />
< category android:name=“android.intent.category.DEFAULT” />

        <activity
            android:name=".HomeActivity"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="HomeActivity" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>

跳转

        Intent intent = new Intent();
        intent.setAction("HomeActivity");
        startActivity(intent);

Intent概述

Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。

Intent由动作、数据、分类、类型、组件、扩展信息、标记等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。

Android页面跳转(Intent)

Action属性

• Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)等。
• 通常与Data一般匹配使用
Android页面跳转(Intent)
例如 短信发送
一、
Uri uri= Uri.parse(“tel:10086”);
Intent intent= new Intent(Intent.ACTION_CALL, uri);
//intent.setData(uri));//设置数据
startActivity(intent);
二、
Manifest里需要添加CALL_PHONE权限

三、
危险权限需要动态申请。

Data属性

Action和Data一般匹配使用,不同的Action由不同的Data数据指定
Android页面跳转(Intent)
Android页面跳转(Intent)

Category属性

• Category属性指明一个执行Action的分类
• Intent中定义了一系列Category属性常量
Android页面跳转(Intent)

按home键时启动自己做的应用

      <intent-filter>
            <category android:name="android.intent.category.HOME"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="android.intent.action.MAIN"/>
      </intent-filter>

Component属性

一、Component属性用于指明Intent的目标组件的类名称。
二、通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。
三、根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:
显式Intent,这种方式通过直接指定组件名称Component来实现;

Intent intent = new Intent();
ComponentName name = new ComponentName(IntentActivity.this,MainActivity.class);
intent.setComponent(name);
startActivity(intent);

**隐式Intent,**这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。

Intent intent = new Intent();
intent.setClassName(IntentActivity.this,"com.ugrow.day02.MainActivity");

显式Intent通过**setComponent()、setClassName()或setClass()**设置组件名

Intent intent = new Intent();
intent.setClass(IntentActivity.this,MainActivity.class);

Extra属性(重点)

通过使用Intent对象的putExtra()方法来添加附加信息、和信息传递
信息添加 方式类似于键值对

Intent intent= new Intent();
intent.putExtra("name","zhangsan");

信息取出 另一个页面
通过使用Intent对象的getXXXExtra()方法可以获取附加信息。
例如,将上面代码存入Intent对象中的人名获取出来,
因存入的是字符串,所以可以使用getStringExtra()方法获取数据

 Intent intent = getIntent();
 String name=intent.getStringExtra("name");

Bundle

打包 当一个页面的数据会向多个页面传递的时候并且不是每个页面都会用到这些数据
比如A页面传到B页面 B页面不需要用数据 但需要将数据传递给C页面
进行多次使用 如果数据过多那么将会导致每一个页面都有大量的get方法 页面不整洁
因此使用Bundle打包

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("user",user.getText().toString());
bundle.putString("pwd",pwd.getText().toString());
intent.putExtras(bundle);

Bundle extras = getIntent().getExtras();
String user = extras.getString("user");
String pwd = extras.getString("pwd");

传递序列化对象

Javabean对象序列化后可以直接使用Extra方法传递对象

一、Javabean对象需要实现Serializable接口

CommentBean implements Serializable

二、传数据

intent.putExtra("bean",commentBean);

三、取数据

 CommentBean commentBean = new CommentBean();
 Intent intent=getIntent();
 commentBean = (CommentBean) intent.getSerializableExtra("bean");

Type属性

Intent intent = new Intent();
Uri uri = Uri.parse("file:///data/vivo.mp4");
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"video/*");
startActivity(intent);

Flag属性

Flag属性用来设定Activity的启动模式,与清单文件中的设置launchMode属性值相同

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Intent.FLAG_ACTIVITY_CLEAR_TOP = singleTask
Intent.FLAG_ACTIVITY_SINGLE_TOP = singleTop
Intent.FLAG_ACTIVITY_NEW_TASK = singleInstance

返回值

一、A页面传值给B页面
startActivity() (putExtra,Bundle)
二、B页面传值给A页面
startActivityForRestult()
setResult(resultCode,Intent)
onActivityResult

A页面跳转B页面 如果转账成功则返回过江 失败则返回有鬼

页面A

    Intent intent = new Intent(MainActivity.this,HomeActivity.class);
        intent.putExtra("money","转账100元");

        //有返回值的跳转
        /*
         * 第一个参数Intent对象
         * 第二个参数 RequestCode
         */
        startActivityForResult(intent,REQUSET_CODE);
    @Override
    //第一个参数 是不是我要的返回结果  第二个参数 是谁返回给我的 第三个参数 返回的附加信息

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == REQUSET_CODE && resultCode == HomeActivity.RESULT_CODE){
            String msg = data.getStringExtra("msg");

            Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
        }



    }

页面B

Intent intent = new Intent();
                Intent getIn = getIntent();
                String money = getIn.getStringExtra("money");
                if(TextUtils.isEmpty(money)){
                    intent.putExtra("msg","有鬼!");

                }else{
                    intent.putExtra("msg","过江!");
                }

                setResult(RESULT_CODE,intent);
                //关闭页面
                finish();

Android页面跳转(Intent)文章来源地址https://www.toymoban.com/news/detail-405622.html

到了这里,关于Android页面跳转(Intent)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解vue 路由跳转四种方式 (带参数)[转载]

      1. router-link 1. 不带参数 2.带参数 2. this.$router.push() (函数里面调用) 1. 不带参数 2. query传参 3. params传参 4. query和params区别 query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传, 密码之类还是用params刷新页面id还在 params类似 post, 跳转之后页面 url后面

    2024年02月03日
    浏览(34)
  • Android之Fragment 跳转返回重复加载重复执行onCreateView的四种解决方法

    前言:  Fragment 跳转返回重复加载重复执行 onCreateView 的问题通常是因为 Fragment 生命周期方法的调用顺序和使用不当所导致的。 1,onSaveInstanceState()方法 一种解决方法是在 Fragment 中使用 onSaveInstanceState() 方法保存 Fragment 的状态,并在 onCreate() 方法中进行状态恢复,避免重复执

    2024年02月06日
    浏览(48)
  • 前端页面导航跳转方式

    1、声明式导航: 使用router-link方式实现的导航、router-link选中的标签会添加class样式 方式一:不带参数 方式二:带参数并且参数通过地址栏显现,整种方式可以拥有二级路由,path+query为一组 方式三:带参数,参数不显示name+params为一组,在定义routes时,需要给组件添加name

    2024年02月13日
    浏览(36)
  • Android页面周期、页面跳转

    Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互。 Activity用于显示用户界面,用户通过Activity交互完成相关操作,一个APP允许有多个Activity。 Activity的生命周期表示一个Activity从开始运行到最后销毁的过程 Resumed (运行状态): Ac

    2024年02月06日
    浏览(55)
  • Activity跳转和Intent传值

    1.重点内容 Activity之间的跳转及数据传递(如何跳转?如何返回?) 使用Intent在Activity之间传递数据)(单向和双向?) 回传数据(怎么回传和接收?) 隐式启动Activity(代码量少,可以实现不同组件之间的跳转) 2.1Intent简介 1.引入 比如下面的图,当我点击”Go to Activity2“

    2023年04月10日
    浏览(40)
  • 微信小程序页面跳转方式+跳转小程序

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab.html 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 跳转到其他页面(非tabBar页) 返回上一页面或返回多级页面 首先需要在当前小程序app.json中定义:需要跳转的小程序的app-id app.josn文件: 第一种方法:wx.

    2024年02月12日
    浏览(75)
  • 小程序的页面跳转方式

    小程序是一种快速发展的应用形式,为用户提供了便捷的功能和交互体验。其中,页面跳转是小程序中常用的功能之一,本文将介绍小程序的页面跳转方式,并提供代码示例,帮助读者更好地理解和实现页面跳转。 一、小程序页面跳转方式: 1. 通过按钮点击跳转: 实现方法

    2024年02月12日
    浏览(37)
  • JavaWeb02(Servlet&页面跳转方式&表单提交方式)

    目录 一.servlet 1.1 什么是servlet? 1.2 实现接口,初始代码 1.3 学会配置和映射 1.4 掌握servlet的生命周期          生命周期的各个阶段 1.5  获取servlet初始化参数和上下文参数 1.5.1  初始代码  推荐使用 1.5.2 初始化参数 1.5.3 上下文参数 1.6 servlet应用:处理用户登录请求 重点:如何拿

    2024年02月01日
    浏览(36)
  • uniapp页面跳转的几种方式

    定义:保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。 使用: 定义:可以关闭当前界面并跳转到其他的非tabbar界面(可带参数) 使用: 定义:关闭所有页面,打开到应用内的某个页面(可带参数) 使用: 定义:跳转到 tabBar 页面,并关闭其

    2024年02月01日
    浏览(47)
  • Android Studio 页面跳转

    问题 编写一个简单的登录页面,当用户输入正确的用户名和密码后,会跳转到欢迎页面,并在页面上显示“欢迎光临,用户名”。 源代码 activity_login.xml: LoginActivity.java: activity_welcome.xml: WelcomeActivity.java: 补充 Intent: Android中提供了Intent机制来协助应用间的交互与通讯,

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包