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();
Intent启动一个新的页面的更多相关文章
- 启动一个新的activity并携带数据,返回数据给上一个activity
一.在启动一个新的activity的时候可以通过Intent携带数据,通过Intent.putExtra()方法通过键值对的形势装入数据.在新启动的activity中通过 getI ...
- Fragment中启动一个新的Activity
最近遇到一个小问题,就是我在主界面中用的是Fragment,其中四个Fragment,然后打算在其中一个里边,写一个TextView(准确地说是Linearout)的单击事件,然后跳转到另外一个Act ...
- IdentityServer4[2]:启动一个新的IdentityServer项目
启动一个新的IdentityServer项目 从头开始,从基础开始,然后变得更加复杂,循序渐进的学习 工具:VS2017 15.9.8 .Net Core2.2 基本过程 创建一个新的ASP.NET ...
- 关于点击ztree的节点将页面生成到easyui的新增选项卡(easyui-tabs)时,总是在浏览器中生成一个新的页面的问题
最近的项目中用到了easyui,还有ztree菜单.在这里将我遇到的一些问题写出来算是做个笔记吧. 这是我头一次在博客园里分享代码,我的处女作,写的不好的地方还望各位见谅! 由于很久没有写过前台的东西 ...
- VC启动一个新线程的三种方法
第一种AfxBeginThread() 用AfxBeginThread()函数来创建一个新线程来执行任务,工作者线程的AfxBeginThread的原型如下: CWinThread* AfxBegin ...
- Layui-admin-iframe通过页面链接直接在iframe内打开一个新的页面,实现单页面的效果
前言: 使用Layui-admin做后台管理框架有很长的一段时间了,但是一直没有对框架内iframe菜单栏切换跳转做深入的了解.今天有一个这样的需求就是通过获取超链接中传递过来的跳转地址和对应的tab ...
- jsp重新打开一个新的页面
有以下一种实现方式: 1.target="_blank” <a href="document.html" target="_blank"> ...
- android 点击通知栏返回应用 ,非启动一个新Activity
再使用如下的 Intent 设置: Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ ...
- android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务
错误详情如下: Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErro ...
随机推荐
- Javascript写了一个2048的游戏
去年2048很火, 本来我也没玩过, 同事说如果用JS写 只要100多行代码: PS(iWeb峰会暨攻城师嘉年华2015嘉年华要来啦, 在文章结尾有具体的地址和时间): 今天试了一下, 逻辑也不复杂, ...
- poj1966 求顶点连通度
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4563 Accepted: 2118 ...
- 详解Mac配置虚拟环境Virtualenv
virtualenv 可以用来建立一个专属于项目的python环境,保持一个干净的环境.只需要通过命令创建一个虚拟环境,不用的时候通过命令退出,删除. 下面介绍一下安装方法: 安装 virtualen ...
- 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧
背水一战 Windows 10 之 绑定 x:Bind 绑定 x:Bind 绑定之 x:Phase 使用绑定过程中的一些技巧 示例1.演示 x:Bind 绑定的相关知识点Bind/BindDemo.x ...
- html 语义化 资料
HTML: The Living Standard 理解HTML语义 什么是HTML语义化 为什么要语义化 写HTML代码时就注意什么 HTML 5的革新——语义化标签(一) header元素 foo ...
- 扩展easyUI tab控件,添加加载遮罩效果
项目里要用HighChart显示图表,如果返回的数量量太多,生成图表是一个很耗时的过程.tab控件又没有显示遮罩的设置(至少本菜是没有找到), Google了一下,根据另一个兄台写的方法,拿来改造了一 ...
- NOI WC2016滚粗记
Day-4 报到日,今年居然没有发包QAQ,中午到的,志愿者很热情,食堂吃不了(也有可能是吃不惯),空调打不热,有拖线板(好评),有wifi覆盖(虽然听说连上要看脸)(反正我是没连过,用的自己的流量) ...
- AngularJs学习之一使用自定义的过滤器
script: 参数item是由AngularJs提供的,是应当被过滤的对象集合.而showComplete是我们传入的参数. {{item.action}} 用ng-model创造一个名为showC ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- Linux基础3(文件权限)
文件权限 1.普通权限 (登陆用户对文件或目录的读写执行的权限) 普通权限对管理员用户无效 文件和目录 都有4中类型的用户u 所有者 : 文件.目录的创建者g 所属组 : 文件.目录属于的用户组o 其 ...