Activity活动(中)
2016-03-11 19:02
381 查看
Activity使用
1、创建Activity
1)定义类继承自Activity类;
2)在清单文件中Application节点中声明<activity>节点;
2、启动Activity
通过意图(Intent)来启动一个Activity;
1) 显示启动:显示启动一般用于自己调用自己的情况(在当前应用找),这样的启动方式比较快速,创建Intent后指定包名和类名;
3)为隐式启动配置意图过滤器:
显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件;
在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动;
<intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动;
Intent对象中设置的action、category、data在<intent-filter>必须全部包含Activity才能启动;
<intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动;(修改:也就是说Intent中有的<intent-filter>中都 要有,而<intent-filter>中有的Intent中不必有)
如果一个意图可以匹配多个Activity,Android系统会提示选择;
3、启动时传递数据
可通过意图Intent对象实现Activity之间的数据传递;
使用Intent.putExtra()方法装入一些数据, 被启动的Activity可在 onCreate方法中getIntent()获取;
可传输的数据类型: a.基本数据类型(数组), b. String(数组), c. Bundle(Map), d. Serializable(Bean), e.Parcelable(放在内存一个共享空间里);
基本类型:
一捆数据:
序列化对象(须实现序列化接口):
接收数据:
在OtherActivity 的onCreate()方法,通过 getIntent().get 相关的数据的方法来获取数据;
4、关闭时返回数据
基本流程:
使用startActivityForResult(Intentintent,int requestCode) 方法打开Activity;
重写onActivityResult(int requestCode,intresultCode, Intent data) 方法;
新Activity中调用setResult(int resultCode, Intent data) 设置返回数据之后,关闭Activity就会调用上面的onActivityResult方法;
注意:
新的Activity的启动模式不能设置成singleTask(如果已创建,会使用以前创建的)与singleInstance(单例,单独的任务栈),
不能被摧毁(执行不到finish方法),父Activity中的 onActivityResult方法将不会执行;
finish():表示关闭当前Activity,会调用onDestroy方法;
1、创建Activity
1)定义类继承自Activity类;
2)在清单文件中Application节点中声明<activity>节点;
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;"><activity android:name="com.itheima.activity.MainActivity" android:label="@string/app_name" > <!-- 程序的入口,LAUNCHER表示桌面快捷方式,进入的是此Activity --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <!—启动时,默认匹配 -- </intent-filter> </activity> </span></span>
2、启动Activity
通过意图(Intent)来启动一个Activity;
1) 显示启动:显示启动一般用于自己调用自己的情况(在当前应用找),这样的启动方式比较快速,创建Intent后指定包名和类名;
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">Intent intent = new Intent(this, OtherActivity.class); startActivity(intent); // 启动新的Activity <pre name="code" class="java">Intent intent = new Intent(); intent.setClassName("com.itheima.activity", "com.itheima.activity.OtherActivity"); // 包名、全类名 startActivity(intent); // 启动新的Activity </span></span>2)隐式启动:一般用于调用别人的Activity,创建Intent后指定动作和数据以及类型
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); // 设置动作 intent.setData(Uri.parse("tel://123456")); // 设置数据// 网页 intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://192.168.1.45:8080/androidWeb")); // 音频/视频,设置type intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file:///mnt/sdcard/daqin.mp3"), "audio/*"); // 设置数据和数据类型,将启动音频播放器(vedio) </span></span>
3)为隐式启动配置意图过滤器:
显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件;
在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动;
<intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动;
Intent对象中设置的action、category、data在<intent-filter>必须全部包含Activity才能启动;
<intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动;(修改:也就是说Intent中有的<intent-filter>中都 要有,而<intent-filter>中有的Intent中不必有)
如果一个意图可以匹配多个Activity,Android系统会提示选择;
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;"><!-- 注册 Activity, lable 表示Activity的标题 --> <activity android:name="com.itheima.activity.OtherActivity" android:label="OtherActivity" > <!-- 配置隐式意图,匹配http --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <!—必须,表示动作为View --> <data android:scheme="http" /> <!—http开头--> <category android:name="android.intent.category.DEFAULT" /> <!-- 必须,表示启动时,默认匹配 --> </intent-filter> <!-- 匹配tel --> <intent-filter> <action android:name="android.intent.action.CALL" /> <data android:scheme="tel" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 必须,表示启动 --> </intent-filter> <!-- 匹配 音频、视频 --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="file" android:mimeType="audio/*" /> <!—文件协议l类型 --> <data android:scheme="file" android:mimeType="video/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 必须,表示启动 --> </intent-filter> </activity> </span></span>
3、启动时传递数据
可通过意图Intent对象实现Activity之间的数据传递;
使用Intent.putExtra()方法装入一些数据, 被启动的Activity可在 onCreate方法中getIntent()获取;
可传输的数据类型: a.基本数据类型(数组), b. String(数组), c. Bundle(Map), d. Serializable(Bean), e.Parcelable(放在内存一个共享空间里);
基本类型:
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">Intent intent = new Intent(this, OtherActivity.class); intent.putExtra("name", "张飞"); // 携带数据 intent.putExtra("age", 12); startActivity(intent); </span></span>
一捆数据:
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">Intent intent = new Intent(this, OtherActivity.class); Bundle b1 = new Bundle(); b1.putString("name", "赵云"); b1.putInt("age", 25); Bundle b2 = new Bundle(); b2.putString("name", "关羽"); b2.putInt("age", 44); intent.putExtra("b1", b1); intent.putExtra("b2", b2); </span></span>
序列化对象(须实现序列化接口):
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">Intent intent = new Intent(this, OtherActivity.class); Person p = new Person("张辽", 44); intent.putExtra("p", p); </span></span>
接收数据:
在OtherActivity 的onCreate()方法,通过 getIntent().get 相关的数据的方法来获取数据;
4、关闭时返回数据
基本流程:
使用startActivityForResult(Intentintent,int requestCode) 方法打开Activity;
重写onActivityResult(int requestCode,intresultCode, Intent data) 方法;
新Activity中调用setResult(int resultCode, Intent data) 设置返回数据之后,关闭Activity就会调用上面的onActivityResult方法;
注意:
新的Activity的启动模式不能设置成singleTask(如果已创建,会使用以前创建的)与singleInstance(单例,单独的任务栈),
不能被摧毁(执行不到finish方法),父Activity中的 onActivityResult方法将不会执行;
finish():表示关闭当前Activity,会调用onDestroy方法;
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">public void openActivityB(View v) { Intent intent = new Intent(this, Activity_B.class); Person p = new Person("张辽", 44); intent.putExtra("p", p); startActivityForResult(intent, 100); // 此方法,启动新的Activity,等待返回结果, 结果一旦返回,自动执行onActivityResult()方法 } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(data == null) { // 没有数据,不执行 return; } System.out.println(requestCode + ", " + resultCode); // code 可用来区分,哪里返回的数据 String name = data.getStringExtra("name"); int age = data.getIntExtra("age", -1); } </span></span>
<span style="font-family:FangSong_GB2312;font-size:18px;"><span style="font-family:FangSong_GB2312;">public void close(View v) { // == 关闭当前Activity时,设置返回的数据 == Intent intent = new Intent(); intent.putExtra("name", "典韦"); intent.putExtra("age", 55); setResult(200, intent); finish(); // 关闭,类似于点击了后退 } </span></span>
相关文章推荐
- iOS 捕获系统外异常
- SDUSTOJ Problem B: 平面上的点——Point类 (II)
- Activity活动(上)
- C++ Primer Plus学习:第三章
- Activiti 基础总结二
- The Clocks
- Nginx安装到使用__me
- NYOJ660逃离地球——只为最大存活率~
- 软件工程第二次作业 软件评价
- VMware Workstation 虚拟机安装
- 几种排序算法总结:
- chrome日历插件开发
- C++ Primer Plus学习:第二章
- 操作系统作业---实验0
- [置顶] 安卓通知栏管理详解及分析 NotificationListenerService
- 使用Button特效 selector+shape
- mysql数据库优化
- 关于C#判断是否是数字的正则式
- 表单提交单选框
- 循环右移