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 ...
随机推荐
- poj3294 出现次数大于n/2 的公共子串
Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13063 Accepted: 3670 Descr ...
- mnsday1t1
贪心地选取两个后缀,然后往前补全,贪心地补全前k个不同的字符 我写了个沙茶dp,结果T掉了,明明都是n3的... #include<iostream> #include<stdio. ...
- eclipse中maven install和build,clean
eclipse插件,m2eclipse 1.maven install相当于maven原生的命令: mvn install 2.aven build是 m2eclipse这个插件自己创造的概念,需要你 ...
- Ajax工作原理(转)
1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...
- UIScrollView 实践经验(转)
转载自:http://tech.glowing.com/cn/practice-in-uiscrollview/ UIScrollView(包括它的子类 UITableView 和 UICollect ...
- [转]git在eclipse中的配置
一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 二_使用EGIT前的配置 配置个 ...
- Leetcode Find K Pairs with smallest sums
本题的特点在于两个list nums1和nums2都是已经排序好的.本题如果把所有的(i, j)组合都排序出来,再取其中最小的K个.其实靠后的很多组合根本用不到,所以效率较低,会导致算法超时.为了简便 ...
- 【BZOJ-3931】网络吞吐量 最短路 + 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1228 Solved: 524[Submit][Stat ...
- jquery插件-表单验证插件-rules
ruels方法 1说明:查看.新增.移除一个表单控件的验证规则 2使用: 表单控件.rules(); 参数: rules() 返回元素的验证规则 rules('add',rules) 增加验证规则 r ...
- 前端打包/自动化构建工具:gulp
glup可以进行打包,并且可以实现类似/script/test-adsf123.js或者/script/test.js?v=asdf123 参考: http://www.ydcss.com/archi ...