灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2195回复:0

Android页面切换方法和区别

楼主#
更多 发布于:2012-09-06 13:48


通用的页面跳转方法有两种:
1、Intent
Intent适合Activity与Activity之间的跳转,按返回键可以直接返回前一页面
缺点:需要到Manifest注册Activity
2、setContentView
适合同一Activity里的不同View之间跳转
优点:按返回键不会返回到前一页面,需要自己添加按键监听代码来实现

只切换Layout运行速度会快点,因为启动activity是最耗时的。
数据传递也简单,不用Intent.setExtra之类的。
缺点是所有控件的事件处理、加载之类的操作全集中由activity管理,拆分不够清晰

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初始化www.atcpu.com
        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);
    }
}
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);
    }
}

摘自  英雄小强

喜欢0 评分0
游客

返回顶部