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


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

1、Intent

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

缺点:需要到Manifest注册Activity

2、setContentView

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

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

    

IntentTest.java代码

  1. import Android.app.Activity;  
  2. import android.content.Intent;  
  3. import android.os.Bundle;  
  4. import android.view.KeyEvent;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.*;  
  8.   
  9. public class IntentTest extends Activity {  
  10.       
  11.     private LinearLayout mainView=null;  
  12.     private Button button1=null;  
  13.     private Button button2=null;  
  14.       
  15.     private LinearLayout layout=null;  
  16.     private TextView tv=null;  
  17.       
  18.     /* 
  19.      * 由于setContentVeiw()函数返回是void,系统中没有提供获取当前View的函数 
  20.      * 所以此处添加一个整形变量用来指示当前View的id 
  21.      */  
  22.     private int currentViewId;  
  23.       
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         //tv初始化   
  27.         tv=new TextView(this);  
  28.         tv.setText("这是layout里面的tv");  
  29.         //layout初始化   
  30.         layout=new LinearLayout(this);  
  31.         layout.setId(100);//这里需要指定id,否则默认的id会和mainView一样,都是-1   
  32.         layout.setLayoutParams(new LinearLayout.LayoutParams(-1,-1));  
  33.         layout.addView(tv);  
  34.         //button1初始化   
  35.         button1=new Button(this);  
  36.         button1.setLayoutParams(new LinearLayout.LayoutParams(-2,-2));  
  37.         button1.setText("Intent方式跳转");  
  38.         button1.setOnClickListener(new OnClickListener(){  
  39.             public void onClick(View v) {  
  40.                 /*此处用Intent来实现Activity与Activity之间的跳转*/  
  41.                 Intent intent=new Intent();  
  42.                 intent.setClass(IntentTest.this,MyActivity.class);  
  43.                 //Intent intent=new Intent(IntentTest.this,MyActivity.class);   
  44.                 startActivity(intent);  
  45.             }  
  46.         });  
  47.         //button2初始化   
  48.         button2=new Button(this);  
  49.         button2.setLayoutParams(new LinearLayout.LayoutParams(-2,-2));  
  50.         button2.setText("setContentView方式跳转");  
  51.         button2.setOnClickListener(new OnClickListener(){  
  52.             public void onClick(View v) {  
  53.                 //此处用setContentView方式来实现统一Activity不同View跳转   
  54.                 setCurrentView(layout);  
  55.             }  
  56.         });  
  57.         //mianView初始化   
  58.         mainView=new LinearLayout(this);  
  59.         mainView.setId(1000);//指定id   
  60.         mainView.setLayoutParams(new LinearLayout.LayoutParams(-1,-1));  
  61.         mainView.setOrientation(LinearLayout.VERTICAL);  
  62.         mainView.addView(button1);  
  63.         mainView.addView(button2);  
  64.         //显示mainView   
  65.         setCurrentView(mainView);  
  66.     }  
  67.       
  68.     /* 
  69.      * 这里重写onKeyDown()函数,实现返回键的监听 
  70.      * 如果通过显示的View对keyListener进行监听,则返回键监听不到 
  71.      * 所以此处是通过在Activity里面重写onKeyDown()函数来实现监听 
  72.      * 此处如果不拦截监听的话,在显示layout后按返回键则直接执行退出程序 
  73.      */  
  74.     public boolean onKeyDown(int keyCode, KeyEvent event) {   
  75.         if (keyCode == KeyEvent.KEYCODE_BACK) {   
  76.             if(currentViewId==layout.getId()){  
  77.                 setCurrentView(mainView);  
  78.             }else{  
  79.                 System.exit(0);  
  80.             }  
  81.             return false;   
  82.         }   
  83.         return false;   
  84.     }  
  85.       
  86.     /*自定义函数setCurrentView()*/  
  87.     public void setCurrentView(View view){  
  88.         currentViewId=view.getId();  
  89.         //此处用setContentView方式来实现统一Activity不同View跳转   
  90.         setContentView(view);  
  91.     }  
  92. }  


MyActivity.java代码

  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.widget.TextView;  
  4.   
  5. public class MyActivity extends Activity{  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         TextView tv=new TextView(this);  
  9.         tv.setText("我是MyActivity里的tv");  
  10.         setContentView(tv);  
  11.     }  
  12. }  

相关内容