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 ...
随机推荐
- Django-Json 数据返回
1 .引入Json import json json.dumps(数据)
- Ehcache缓存配置
Cache的配置很灵活,官方提供的Cache配置方式有好几种.你可以通过声明配置.在xml中配置.在程序里配置或者调用构造方法时传入不同的参数. 你可以将Cache的配置从代码中剥离出来,也可以在使用 ...
- 【BZOJ-1787&1832】Meet紧急集合&聚会 倍增LCA
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2259 Solved: 1023[Submit] ...
- 基于spring的文件上传--单文件上传
Spring配置文件 <bean id="multipartResolver" class="org.springframework.web.multipart.c ...
- 【uoj264】 NOIP2016—蚯蚓
http://uoj.ac/problem/264 (题目链接) 题意 n条蚯蚓,时间为m.每单位时间要可以将最长的蚯蚓切成len/2和len-len/2两份,长度为0的蚯蚓不会消失,因为每单位时间所 ...
- 利用PHPMailer发送邮件时报错
利用thinkphp集成PHPMailer发送邮件时报错:Failed to connect to server: Unable to find the socket transport “ssl” ...
- subprocess实现管道
# shell last | cut -d ' ' -f 1 | sort -u #python from subprocess import Popen,PIPE p1 = Popen('last' ...
- MATLAB for循环优化三例
最近一周,对MATLAB有进行了新一轮的学习,对其矩阵化编程的思维有了更深入的了解.确实精妙! 例1: 将矩阵A= [1 2 3; 2 4 3; 3 4 5]中所有的数字3替换为33. 如果还停留在C ...
- python中set使用
In [2]: a = set() # 常用操作1 In [3]: a Out[3]: set() In [4]: type(a) Out[4]: set In [5]: b = set([1, 3] ...
- iOS 简单的动画自定义方法(旋转、移动、闪烁等)
#define kDegreesToRadian(x) (M_PI * (x) / 180.0) #define kRadianToDegrees(radian) (radian*180.0)/(M_ ...