Intent相关
Intent是什么?
翻译为:意图,目的(名词)
其实根本没必要管它是什么,看看它能做什么就好了。
不过后来我知道了,它就是个机制----通信机制-----android的许多组件间的交流要依赖它。
下面说一些例子:
一、连接活动
例子的思路很简单:从一个组件跳转到另外一个组件
1. 组件=UI组件+类组件 ,即,需要一个.java文件,还需要一个layout文件
2. 用组件就要注册,在AndroidManifest.xml文件中加入代码就是了
main_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是第一个活动" />
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:text="导航到第二个activity" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
startActivity(new Intent("com.example.intenttest.SecondActivity"));//指定activity的名字
}
}
这就是第一个组件(建工程的时候,就在AndroidManifest.xml文件中注册过了,不要瞎操心) onClick()里面的这句就是跳转了。
下面写第二组件
secondactivity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是第2个活动"/>
</RelativeLayout>
SecondActivity.java
public class SecondActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
}
}
注册(在application标签内加入)
<activity
android:name="com.example.intenttest.SecondActivity"
android:label="@string/activity_second">
<intent-filter>
<action android:name="com.example.intenttest.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
这里有一个intent-filter,表示意图筛选器,其他活动就是通过这个东西来启动本活动的,相当于这货是向外暴露本activity,或者说,做一个说明限定。
(android中定义的活动,可以被任意应用程序调用,所以意图筛选器的名称要写的很清楚)
(当然如果不幸,俩筛选器的名称一样,那系统会提示您做默认选择的;如果要清楚默认,要到setting—> application—>找到应用程序 app info ---> clear default)

点击按钮,就显示第二个activity了。

小结:intent确实可以连接两个activity,关键代码是:
startActivity(new Intent(activity的名字));
补充:如果要启动的activity是本类的activity,那么可以有另外一种写法:
startActivity(new Intent(this, SecondActivity.class));
2. 从意图返回结果
大概想了想怎么回事儿:(我自己的理解,不知道有没有问题)
上面的例子,主Activity启动SecondActivity是用的 startActivity()方法。
现在要从第二个活动返回结果给主活动,那么必须事先把两个活动都标示好,requestCode和resultCode分别标示主调活动和被调活动
并且主活动启动第二个活动的时候用
startActivityForResult(Intent data,int requestCode);
还要有一个活动来处理被调活动传来的数据:
onActivityResult(int requestCode, int resultCode, Intent data);
被调活动?它做的事儿就相对比较简单了:在Intent中设置数据,用resultCode标示.
setResult(int resultCode, Intent data);
玩一把:
secondactivity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是第2个活动"
android:gravity="center_horizontal"/>
<EditText
android:id="@+id/et0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要传回的数据"
android:layout_below="@id/tv0"
/>
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et0"
android:text="传回去"
/>
</RelativeLayout>
SecondActivity.java
public class SecondActivity extends Activity implements OnClickListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
Button btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//最好检验一下用户是否输入了
Intent data = new Intent();
EditText et = (EditText) findViewById(R.id.et0);
if(et.getText()!=null)
{
data.setData(Uri.parse(et.getText().toString()));// 这里设置数据格式应该还有多种方式,不单单有Uri data
setResult(RESULT_OK,data); //resultCode也可以写自己定义的,比如1啊、2啊之类的
finish(); // 结束该活动,并将控制返回给主调者
}
}
}
int android.app.Activity.RESULT_OK = -1 [0xffffffff]
Standard activity result: operation succeeded.
这就是说,RESULT_OK是预定义的 int 类型的 resultCode。
除此之外还有一个:RESULT_CANCELLED
下面处理主activity,也就是主调活动:
public class MainActivity extends Activity implements OnClickListener
{
private int request_Code = 1;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
startActivityForResult(new Intent("com.example.intenttest.SecondActivity"),request_Code);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1 && resultCode==RESULT_OK)
{
Toast.makeText(this, data.getData().toString(), Toast.LENGTH_LONG).show();
}
}
}
requestCode如果设置为-1,那么
startActivityForResult(new Intent("com.example.intenttest.SecondActivity"),request_Code);
和startActivity(new Intent(被调activity)); 一样了
赶快看看效果:



很成功啊,很不错啊!
补充一点:
上面传值一律用的 intent对象.setData()或者getData() ,应该还有其他方式。再说吧。
Intent相关的更多相关文章
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- Activity Intent相关FLAG介绍
先首先简单介绍下Task和Activity的关系 Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面,最后添加的东西(Activity ...
- Android中intent相关,setFlag(xx);
intent.setFlags(参数)://参数用法如下 :FLAG_ACTIVITY_CLEAR_TOP: 例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个intent ...
- Android之Intent相关知识
什么是Intent?Intent的作用? Intent是一个消息传递对象,我们可以通过它来启动其他组件或者在组件之间传递数据. 通过Intent启动其他组件 Intent可以用来启动Activity, ...
- 显示intent和隐示intent有什么区别
显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent. 隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent. 说明:And ...
- Android开发之Intent略解
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意 ...
- Android中Intent传值与Bundle传值的区别详解
Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面 这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...
- Android中Intent组件详解
Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...
- 最全面的Android Intent机制讲解
对于大型软件开发经验较少的程序员来说,这可能是一个不太容易理解的抽象概念,因为它与我们平常使用的简单函数调用,或者通过库调用接口的方式不太一样.在 Intent 的使用中你看不到直接的函数调用,相对函 ...
随机推荐
- 关于Netty4.x中文教程系列更新进度的说明和道歉
最近一些事情.貌似发现很久没更新教程了.这里和大家说一声对不起.教程5的前半部分差不多年前就写好了.但是由于年前我在的项目组项目进度比较紧张.一直在加班.教程的后半部分就一直没有写.年后由于一些公司人 ...
- [转]C:int型指针
开源中国:http://my.oschina.net/lotte1699/blog/142538 网页快照:http://www.piaocafe.com/295977937/139381567037 ...
- 【用户分析-用户场景】这TM才是产品思维!
@奶牛Denny :很长一段时间里,市场推广/营销(Marketing)在中国似乎是一个大家很忌讳的词汇.市场推广无非就是夸大包装,炒作一下,卖卖情怀——很多人都是这么觉得的,因为确实有一部分急功近利 ...
- HDU 4620 Fruit Ninja Extreme 搜索
搜索+最优性剪枝. DFS的下一层起点应为当前选择的 i 的下一个,即DFS(i + 1)而不是DFS( cur + 1 ),cur+1代表当前起点的下一个.没想清楚,TLE到死…… #include ...
- weblogic11g 节点管理器 nodemanager
Weblogic 节点管理器 nodemanager 一.Weblogic 规划 : Server名称 端口 ip 备注 xyyadmin 7001 10.10.54.74 管理server ap ...
- Linux系统时间与RTC时间【转】
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3637782 Linux的RTC驱动相对还是比较简单的,可以将它作为一个普通的字符 ...
- 笔记三、apache搭建gitweb【转】
参考文章: http://www.latelee.org/using-gnu-linux/ubuntu-apache-gitweb.html http://blog.csdn.net/ ...
- Android开发实例详解之IMF(Android SDK Sample—SoftKeyboard)
本博前面的文章介绍了Android开发环境的搭建和模拟器的常用操作.本次,将以Android Sample中经典的SoftKeyboard项目为例,详细解析Android上一个小型项目的开发过程和注意 ...
- Spring事务报Connection is read-only
昨天做项目时,写了个方法,程序突然报了Connection is readonly. Queries leading to data modification are not allowed调了程序半 ...
- git subtree有效管理公共第三方lib
如果你的项目中有很多第三方的lib,你希望使用它,并且也希望可能对该lib做修改并且贡献到原始的项目中去,或者你的项目希望模块化,分为几个repo单独维护,那么git subtree就是一个选择.gi ...