Intent启动一个新的页面

一,Intent(目的) 的分类

  • 显式 Intent

构造函数重载之一:

     Intent intent = new Intent(FirstActivity.this,SecondActivity.class);         //创建一个Intent 对象,第一个参数content(传入上下文),第二个参数传入目标活动。
     startActivity(intent);                                                       //通过startActivity方法启动活动,传入参数(intent)    
  • 隐形 Intent(个人理解:隐式就是不能直接看到跳转的目的地,而是叫了一声名字,名字符合的人对号入座)

在AndroidMainfest中对action和category 进行描述,只有当intent中的action和category都匹配时才能启动活动(category默认为DEFAULT(默认的

        <activity android:name=".SecondActivity"
            android:label="这是要启动的activity">
            <intent-filter>
                <action android:name="com.example.cenzhongman.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

构造函数重载之二:

       public void onClick(View view) {
                Toast.makeText(FirstActivity.this, "启动页面二", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent("com.example.cenzhongman.ACTION_START");//直接传入action的字符串
                //默认的category默认匹配
                startActivity(intent);
            }

 

二,关于intent 隐式的更多用法

可以调用(其他app)如浏览器打开网页:

button1.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent);   //特别注意的是,一定要启动!!!
  }
});

  这里我们首先指定了 Intent action Intent.ACTION_VIEW, 这是一个 Android 系统内
置的动作,其常量值为 android.intent.action.VIEW。然后通过 Uri.parse()方法,将一个网址字
符串解析成一个 Uri 对象,再调用 Intent setData()方法将这个 Uri 对象传递进去。

三,设定自己的intent接口

在AndroidMaintest.xml中注册

    <activity android:name=".ThirdActivity"
            android:label="hehe">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

action.View(应该是浏览器接口,我猜是这样。。。。日后完善)
通过隐式Intent找到 action.VIEW 这个 action ,category 依旧是默认;

<data>标签指定数据协议  http  协议。(不是http://)

  •  来一个拨打电话的
  • action.DIAL   动作
  • tel    协议  (tel:10086)
  • 永远别忘记启动

四,Intent传递参数

Intent 中提供了一系列 putExtra()方法的重载

  • 参数传入
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.cenzhongman.ACTION_START");
                String data = "Hello SecondActivity";
                intent.putExtra("extra_data",data);//第一个参数是键(亲测,可以随便取),string name 数据的名字,第二个参数,数据
                startActivity(intent);
            }
        });

注意这里 putExtra()方法接收两个参数,第一个参数是键,用于后面从 Intent中取值,第二个参数才是真正要传递的数据。

  • 参数获取
        Intent intent = getIntent();//获取启动Intent
        String data = intent.getStringExtra("extra_data");//获取数据关键字
        Log.d("SecondActivity", data);//打印日志

 五,参数的返回

1.调用startActivityForResult()方法启动activity,需要返回数据

    public void myOnclick(View view) {
        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
        startActivityForResult(intent,1);
    }    

2.点击返回按键,事件中创建Intent对象

       public void onClick(View view) {
              Intent intent = new Intent();
                intent.putExtra("Data_return","Hello FirstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }

Intent对象仅仅传递数据,不启动新的Activity

调用了 setResult()方法,用于向上一个活动返回数据的。setResult()方法接收两个参数 ,第一个 参数用于向上一个活动返回处理结果 ,一 般只使用 RESULT_OK
RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去


3.Activity被销毁之后会回调上一个活动的 onActivityResult()方法 ,重写该方法

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   switch (requestCode) {                                                         //检查 equestCode的值来判断数据来源 
   case 1:
     if (resultCode == RESULT_OK) {                                              //判断是否处理成功
       String returnedData = data.getStringExtra("data_return");
       Log.d("FirstActivity", returnedData);
    }
    break;
  default:
  }
}


4,按下返回键的情况,重写onBackPressed() 方法

@Override
  public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("data_return", "Hello FirstActivity");
    setResult(RESULT_OK, intent);
    finish();
}

自行销毁一个活动

杀死一个人只需要一句话,销毁活动也一样:

finish();