Android页面跳转的方法

本文详细介绍了Android应用中两种常见的页面跳转方法:通过Intent在不同Activity间跳转及在同一Activity内通过更改布局文件实现视图切换。文章还提供了代码示例和清单文件配置说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android页面跳转的方法

方法一:Intent进行跳转:

Intent方法进行页面跳转适用于两个Activity之间的跳转,按返回键可以直接返回到前一个页面。

使用时需要注意在Manifest.xml文件中注册Activity!

//Intent类有多个构造方法
Intent intent = new Intent();
intent.setAction(action);//等同于使用action
intent.setClass(packageContext, cls);//等同于使用类名

Intent intent = new Intent(action);
Intent intent = new Intent(packageContext, cls);

第二个构造方法很简单,第一个参数为本Activity的上下文环境,第二个参数为跳转到的Activity类,如下:

//第一个参数看情况而定,有时候需要加上本Activity的类名FirstActivity.this

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

我想演示一下使用action的方式,顺便看一下action怎么用:

使用action进行跳转,Activity在Manifest.xml中注册时要有一个IntentFilter段,只有在这个段中包含了相同action名,Activity才能与这个Intent匹配进行跳转。
Action的值在Android中有很多预定义,如果需要直接转到自定义的Intent接收者中,则需要在IntentFilter中加入自定义的Action值(同时需要设定Category值为“android.intent.category.DEFAULT”,→_←,我并不知道为什么,反正不加会报错的!),并在Intent中设定响应的Action,这样就能进行匹配,因为这个Action在系统中是唯一的。

明确如下定义:(抄来的)
1.ACTION的值是一个类型为String的字符串
2.Intent中ACTION的值是双向的,发送方发给接受方中的ACTION值能够被双方了解!这样在发送方中,自定义ACTION的值,在接受方中,Intent-filter中的ACTION值要与自定义的值相同,这样才能够正确接受Intent
3.自定义的ACTION值最好格式为:这个字符串最好是package name + activity class name+your action

示例如下:

//FirstActivity.java
package com.example.pagejump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends Activity {

    public static final String MYACTION = 
            "com.example.pagejump.FirstActivity.JumpToSecondActivity";
    private Button firstPageButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        initView();
    }

    private void initView() {
        firstPageButton = (Button) findViewById(R.id.firstBtn);
    }

    public void firstBtnOnClick(View view){
        Intent intent = new Intent();
        intent.setAction(MYACTION);
        startActivity(intent);
    }
}
//SecondActivity.java
package com.example.pagejump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class SecondActivity extends Activity {

    public static final String MYACTION2 = 
            "com.example.pagejump.FirstActivity.JumpToFirstActivity";

    private Button secondPageButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        initView();
    }

    private void initView() {
        secondPageButton = (Button) findViewById(R.id.secondBtn);
    }

    public void secondBtnOnClick(View view){
        Intent intent = new Intent();
        startActivity(intent);
    }

}

清单文件如下:

<activity
            android:name=".FirstActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="com.example.pagejump.FirstActivity.JumpToFirstActivity"/>
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity 
            android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.pagejump.FirstActivity.JumpToSecondActivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

两个activity的布局文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >


    <Button 
        android:id="@+id/firstBtn"
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击此处跳转到第二个页面"
        android:onClick="firstBtnOnClick"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这里是第一个页面" />

</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000" 
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >


    <Button 
        android:id="@+id/secondBtn"
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击此处跳转到第一个页面"
        android:background="#7D5D94"
        android:onClick="secondBtnOnClick"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这里是第二个页面" 
        android:textColor="#FF0000"/>

</LinearLayout>

方法二:使用布局文件以及setContentView()方法实现

适合同一Activity里的不同View之间跳转,虽然是实现了界面的来回跳转,但是始终是同一个Activity,所以类变量,函数等都是公用的!按返回键也不会返回到前一页面,需要自己添加按键监听代码来实现,

两个布局文件如上所示,接下来只要在同一个Activity类中写上两个页面的点击button进行转换的代码:

package com.example.pagejump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends Activity {

    //public static final String MYACTION = 
    //      "com.example.pagejump.FirstActivity.JumpToSecondActivity";
    private Button firstPageButton;
    private Button secondPageButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置第一个布局文件为默认的加载界面
        setContentView(R.layout.activity_first);

        initView();
    }
    //获取两个Button对象
    private void initView() {
        firstPageButton = (Button) findViewById(R.id.firstBtn);
        secondPageButton = (Button) findViewById(R.id.secondBtn);
    }
    //添加第一个Button对象的监听器
    public void firstBtnOnClick(View view){
        //加载第二个布局文件
        setContentView(R.layout.activity_second);
    }
    //添加第二个Button对象的监听器
    public void secondBtnOnClick(View view){
        //加载第一个布局文件
        setContentView(R.layout.activity_first);
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值