Android页面跳转实现方法讲解(纯java)

通用的页面跳转方法有两种:

1、Intent

Intent适合Activity与Activity之间的跳转,按返回键可以直接返回前一页面

缺点:需要到Manifest注册Activity

2、setContentView

适合同一Activity里的不同View之间跳转

优点:按返回键不会返回到前一页面,需要自己添加按键监听代码来实现

    

IntentTest.java代码

 

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class IntentTest extends Activity {
    
	private LinearLayout mainView=null;
	private Button button1=null;
	private Button button2=null;
	
	private LinearLayout layout=null;
	private TextView tv=null;
	
	/*
	 * 由于setContentVeiw()函数返回是void,系统中没有提供获取当前View的函数
	 * 所以此处添加一个整形变量用来指示当前View的id
	 */
	private int currentViewId;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //tv初始化
        tv=new TextView(this);
        tv.setText("这是layout里面的tv");
        //layout初始化
        layout=new LinearLayout(this);
        layout.setId(100);//这里需要指定id,否则默认的id会和mainView一样,都是-1
        layout.setLayoutParams(new LinearLayout.LayoutParams(-1,-1));
        layout.addView(tv);
        //button1初始化
        button1=new Button(this);
        button1.setLayoutParams(new LinearLayout.LayoutParams(-2,-2));
        button1.setText("Intent方式跳转");
        button1.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				/*此处用Intent来实现Activity与Activity之间的跳转*/
				Intent intent=new Intent();
				intent.setClass(IntentTest.this,MyActivity.class);
				//Intent intent=new Intent(IntentTest.this,MyActivity.class);
				startActivity(intent);
			}
        });
        //button2初始化
        button2=new Button(this);
        button2.setLayoutParams(new LinearLayout.LayoutParams(-2,-2));
        button2.setText("setContentView方式跳转");
        button2.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				//此处用setContentView方式来实现统一Activity不同View跳转
				setCurrentView(layout);
			}
        });
        //mianView初始化
        mainView=new LinearLayout(this);
        mainView.setId(1000);//指定id
        mainView.setLayoutParams(new LinearLayout.LayoutParams(-1,-1));
        mainView.setOrientation(LinearLayout.VERTICAL);
        mainView.addView(button1);
        mainView.addView(button2);
        //显示mainView
        setCurrentView(mainView);
    }
    
    /*
     * 这里重写onKeyDown()函数,实现返回键的监听
     * 如果通过显示的View对keyListener进行监听,则返回键监听不到
     * 所以此处是通过在Activity里面重写onKeyDown()函数来实现监听
     * 此处如果不拦截监听的话,在显示layout后按返回键则直接执行退出程序
     */
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK) { 
            if(currentViewId==layout.getId()){
            	setCurrentView(mainView);
            }else{
            	System.exit(0);
            }
            return false; 
        } 
        return false; 
    }
    
    /*自定义函数setCurrentView()*/
    public void setCurrentView(View view){
    	currentViewId=view.getId();
    	//此处用setContentView方式来实现统一Activity不同View跳转
    	setContentView(view);
    }
}


MyActivity.java代码

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MyActivity extends Activity{
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv=new TextView(this);
        tv.setText("我是MyActivity里的tv");
        setContentView(tv);
    }
}

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值