安卓APP页面跳转

243 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

一、添加一个页面

  1. 在src上面右键,new一个Other
  2. 选择Android,Android Activity
  3. 选择Blank Activity
  4. 更改Activity Name(类的名字),Layout Name自动更改(布局名字),点击Finish完成

​编辑

二、页面跳转

2.1、实现方法

  1. 在java文件中,Intent类 ,new一个对象,设置要跳转的页面
    构造方法,第一个参数当前页面,第二个参数跳转到哪个页面

    Intent intent = new Intent(this, SecondActivity.class);
    
  2. 跳转

    startActivity(intent);
    
  3. 使用按键跳转页面
    参考博文

三、传递参数方法一

3.1、传递

Intent类的方法putExtra

putExtra,参数1键值队(接收的时候需要这个参数),参数2传递的信息(可以是很多种数据类型)

intent.putExtra("Mydata", "小伟");

3.2、接收

  1. 把传过来的Intent获取过来

    Intent i = this.getIntent();
    
    
  2. 用一个数据类型变量,把键里面的值获取出来

    data = i.getStringExtra("Mydata");
    
  3. 把获取的数据显示在页面

    Toast.makeText(this, "收到数据," + data, 0).show();
    

四、传递参数方法二

传递参数类型多了,就要用这种方法

  1. 使用Bundle类,可以传递很多参数

    Bundle bundle = new Bundle();
    bundle.putString("Mydata", "小伟");
    bundle.putInt("ID", 101);
            
    intent.putExtras(bundle);
    
  2. 接收方法和第一种一样

    Intent i = this.getIntent();    //获取Intent
    Bundle b = i.getExtras();        //获取Bundle
    String data = b.getString("Mydata"); //把Bundle传过来的值获取出来
    int data2 = b.getInt("ID");
    		
    //在页面显示
    Toast.makeText(this, "收到数据," + data + data2, 0).show();
    

五、页面的自动跳转(线程)

 5.1、sleep等待3s

如果在java里面直接加sleep,阻塞的是UI线程

要想实现在某个界面等待3s后自动跳转,必须创建新的线程进行阻塞

  1. UI线程
    安卓APP启动有一个主要的UI线程
    功能是不断的刷新界面
    所以阻塞UI线程会出现 不显示的现象(空白界面)
    ​编辑

  2. 创建新线程
    实例化Thread,并且实例化接口(编写新线程需要干的事情)
    start,启动线程

            Thread t = new Thread(new Runnable() { //实例化一个接口run
    			@Override
    			public void run() {	//这个函数接口里,编写新线程需要干的事情
    				// TODO Auto-generated method stub
    				try {
    					Thread.sleep(3000);	//睡眠3s
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				//设置跳转页面
    				Intent intent = new Intent(OneActivity.this, MainActivity.class);
    				//跳转
    				startActivity(intent);
    			}
    		});	//实例化一个线程
    		t.start();	//启动线程