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 ...
随机推荐
- git 创建别名
git config --global alias.shortname command 例子如下 git config --global alias.psm 'push origin master' ...
- 512M内存编译php出错
make时错误如下 virtual memory exhausted: Cannot allocate memory make: *** [ext/fileinfo/libmagic/apprenti ...
- mysql-异常Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 网上摘抄的问题解决方案:http:// ...
- WordPress 博客文章时间格式the_time()设置
国外设计的WordPress 主题里的文章的时间格式是类似“十一月 21, 2010”这种格式的,而中国人习惯的是年在前,月紧跟其后,日在末尾,所以看国外的就显得很别扭,但是我们可以通过修改WP时间代 ...
- 控制浏览器高度 宽度 只能支持ie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- High购电商系统开发注意点
1.引入第三方框架AFnetworking时,记得在xcode项目添加安全属性(自认为). 2.异步加载数据时,如果用数组来装模型,记得对数组进行初始化.对控件的赋值一般在获取数据之后.如果用到Tab ...
- ORA-29538、ORA-29532、ORA-29913问题解决
问题一:ERROR at line 1: ORA-29538: Java not installed解决方法1.检查有没有安装JAVA组件select * from v$option t where ...
- 【faster-rcnn】训练自己的数据集时的坑
既然faster-rcnn原版发表时候是matlab版代码,那就用matlab版代码吧!不过遇到的坑挺多的,不知道python版会不会好一点. ======= update ========= 总体上 ...
- 【poj3422】 Kaka's Matrix Travels
http://poj.org/problem?id=3422 (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的K条路径,使得取到的数的和最大. Solution ...
- phpcms /api/phpsso.php SQL Injection Vul
catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link:2. 漏洞触发条件3. 漏洞影响范围4. ...