一,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();

Intent启动一个新的页面的更多相关文章

  1. 启动一个新的activity并携带数据,返回数据给上一个activity

    一.在启动一个新的activity的时候可以通过Intent携带数据,通过Intent.putExtra()方法通过键值对的形势装入数据.在新启动的activity中通过           getI ...

  2. Fragment中启动一个新的Activity

    最近遇到一个小问题,就是我在主界面中用的是Fragment,其中四个Fragment,然后打算在其中一个里边,写一个TextView(准确地说是Linearout)的单击事件,然后跳转到另外一个Act ...

  3. IdentityServer4[2]:启动一个新的IdentityServer项目

    启动一个新的IdentityServer项目 从头开始,从基础开始,然后变得更加复杂,循序渐进的学习 工具:VS2017 15.9.8 .Net Core2.2 基本过程 创建一个新的ASP.NET ...

  4. 关于点击ztree的节点将页面生成到easyui的新增选项卡(easyui-tabs)时,总是在浏览器中生成一个新的页面的问题

    最近的项目中用到了easyui,还有ztree菜单.在这里将我遇到的一些问题写出来算是做个笔记吧. 这是我头一次在博客园里分享代码,我的处女作,写的不好的地方还望各位见谅! 由于很久没有写过前台的东西 ...

  5. VC启动一个新线程的三种方法

    第一种AfxBeginThread() 用AfxBeginThread()函数来创建一个新线程来执行任务,工作者线程的AfxBeginThread的原型如下: CWinThread* AfxBegin ...

  6. Layui-admin-iframe通过页面链接直接在iframe内打开一个新的页面,实现单页面的效果

    前言: 使用Layui-admin做后台管理框架有很长的一段时间了,但是一直没有对框架内iframe菜单栏切换跳转做深入的了解.今天有一个这样的需求就是通过获取超链接中传递过来的跳转地址和对应的tab ...

  7. jsp重新打开一个新的页面

    有以下一种实现方式: 1.target="_blank” <a href="document.html" target="_blank"> ...

  8. android 点击通知栏返回应用 ,非启动一个新Activity

    再使用如下的 Intent 设置: Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ ...

  9. android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务

    错误详情如下: Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErro ...

随机推荐

  1. Linux_rsylogd日志轮替(三)

    一.轮替规则及配置文件:vi /etc/logrotate.conf 1.如果配置文件中拥有" dateext"参数,那么日志会用日期来作为日志文件的后缀,例如" sec ...

  2. 【CodeVS 5032】【省队集训2016 Day5 T1】Play with array

    一开始我用分块大法,分成$\sqrt{n}$块,每个块上维护一个Splay,然后balabala维护一下,时间复杂度是$O(n\sqrt{n}logn)$.后来对拍的时候发现比$O(n^2)$的暴力跑 ...

  3. 51nod 1109 bfs

    给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1.求最小的M.   例如:N = 4,M = 100. Input 输入1个数N.(1 <= N ...

  4. linux下mysql基础从安装到基本使用

    在LINUX下安装MYSQL #需要的安装包(按照先后顺序) libdbi-devel--2.1 libdbi--2.1 libdbi-drivers- perl-DBI-.el5 perl-DBD- ...

  5. OneThink学习笔记01

    OneThink1.0开发手册: http://document.onethink.cn/manual_1_0.html 简介  OneThink是一个开源的内容管理框架,基于最新的ThinkPHP3 ...

  6. TLS版本

    常见应用: https其实就是建构在SSL/TLS之上的 http协议. 1) setProtocol="TLS" will enable SSLv3 and TLSv1 2) s ...

  7. 【BZOJ-4653】区间 线段树 + 排序 + 离散化

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 107  Solved: 70[Submit][Status][Di ...

  8. JDBC链接MySQL

    首先,这里的JavaWeb使用JDBC的方法与Java的使用方法相似,但是有不同之处: 在Java中导入驱动包以后,直接用DriverManager.getConnection()获取连接对象, 而在 ...

  9. iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题

    最近在开发项目时编译三方.a时出现了冲突,原因是存在duplicate symbol. <1>模拟器编译时,应用的即时通讯模块采用的三方库(容联云),和视频监控模块采用的三方库(海康威视) ...

  10. [iOS Xcode注释插件]

    来自onevcat的VVDocumenter-Xcode,地址是:https://github.com/onevcat/VVDocumenter-Xcode 使用方式:按三下"/" ...