第二行代码学习笔记——第二章(1)
2017-02-21 20:11
477 查看
Activity的启动和数据传递
1、Activity是什么
Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。
2、活动创建过程中应注意的问题
2.1 Android程序的设计讲究逻辑和视图分离。
2.2 创建的活动应该在 AndroidManifest 中注册,放在<application>
标签内 。
2.3 主活动标签,设置该Activity为主活动,应用启动时首先打开这个Activity
<intent-filter> <action android:name = "android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter>
如果一个应用程序没有声明主活动,这个程序依然可以安装,只是无法在启动器中看到或者打开这个程序。
这种程序一般都是作为第三方服务提供给其他应用在内部进行调用。如:支付宝的快捷支付服务
2.4 活动中Menu的使用
(1) 在res目录下新建一个menu文件夹。右击res目录——>New——>Directory,输入文件名menu,点击OK;
(2)在该文件夹下新建一个名为main的菜单文件。
右击menu文件夹——> New ——>Menu resource file,输入文件名main,然后向menu添加以下代码
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_main_one" android:title="第一个" android:icon="@mipmap/ic_launcher" /> <item android:id="@+id/menu_main_two" android:title="第二个"/> </menu>
(3)在Activity中重写onCreateOptionsMenu()方法(快捷键ctrl + o),写入如下代码:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); //true表示显示 return true; }
其中inflate接受两个参数,第一个参数指定使用哪一个资源文件,第二个参数指定将菜单项添加到哪一个Menu对象中。方法返回true,表示允许创建的菜单显示出来
(4)重写onOpitionsItemSelected()方法,定义菜单点击事件。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_main_one: Toast.makeText(this, "点击第一个", Toast.LENGTH_SHORT).show(); break; case R.id.menu_main_two: Toast.makeText(this, "点击第二个", Toast.LENGTH_SHORT).show(); break; } return true; }
2.5销毁一个活动
调用finish()方法。3、Intent的使用
Intent是Android程序中各组件之间进行交互的一种重要方式。它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
3.1 显示Intent
在构造Intent时指明目标Activity,例如Intent intent= new Intent(FirstActivity.this, SecondActivity.class);
可以看出intent的”意图”非常明显,所以叫显示意图
3.2 隐式Intent
不明确指出想要启动哪一个Activity,而是指定一系列更为抽象的action和category,交由系统分析并找到指定的Activity。在< activity >标签下的< intent-filter >中指定当前活动响应的action和category,只有同时满足这两个值才能响应Intent
3.2.1 在< activity >标签中写配置action 和 category
action和category中的name:可以随便写。系统也默认提供一些值。
android.intent.category.DEFAULT 是一种默认的category
<activity android:name=".FirstActivity"> <intent-filter> <action android:name="com.answer.demo2.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
3.2.2 如何使用隐式Intent
使用构造方法
Intent intent = new Intent(“com.answer.demo2.ACTION_START”);
添加action
使用 addCategory(“com.answer.semo2.ACTION_START”);
添加category
3.2.3 每个Intent只能指定一个action,但是能指定多个category
3.3 更多隐式Intent用法
使用隐式Intent还可以启动其他程序的Activity例:
3.3.1 调用系统浏览器
Intent webIntent = new Intent(Intent.ACTION_VIEW); webIntent.setData(Uri.parse("http://www.baidu.com")); startActivity(webIntent);
使用了setData() 方法,该方法接受一个Uri对象,用于指定当前Intent正在操作的数据。与之对应的在< intent-fileter >标签中配置一个< data >标签,用于更精确的指定当前活动能够响应什么类型的数据。
3.3.2 调用拨号
Intent phoneIntent = new Intent(Intent.ACTION_DIAL); phoneIntent.setData(Uri.parse("tel:10086")); startActivity(phoneIntent);
3.4 向下传递一个数据
用putExtra() 方法携带数据,用getStringExtra() 获取数据(不同的数据类型用不同的getXXXExtra()方法)。//传递数据 Intent toFirstIntent = new Intent(MainActivity.this, FirstActivity.class); toFirstIntent.putExtra("name", "Answer"); startActivity(toFirstIntent); //接收传来的数据 Intent intent = getIntent(); String name = intent.getStringExtra("name");
PS : 需要补充一篇传递不同类型数据的博客
3.5 返回数据给上一个Activity
(1)用startActivityForResult()方法,该方法期望在活动销毁的时候返回一个结果给上一个活动,接受两个参数,一个是Intent,另一个是请求码。所以在MainActivity中:Intent toFirstIntent = new Intent(MainActivity.this, FirstActivity.class); startActivityForResult(toFirstIntent, 1);
(2)在目标Activity中用setResult方法添加需要返回的数据
在FirstActivity中,首先构建一个Intent 用于传递数据,然后将需要传递的数据通过putExtra() 存入Intent,最后用setResult()方法,用于向上一个Activity返回数据。该方法接收两个参数 第一个用于向上一个Activity返回处理结果,第二个参数把带有数据的Intent传递回去。
Intent intent = new Intent(); intent.putExtra("back_data", "Answer"); setResult(RESULT_OK, intent); finish();
(3)由于用startActivityForResult()方法启动目标Activity,所以目标Activity销毁后会回调原Activity中的onActivityForResult()
onActivityForResut()有三个参数,第一个参数requestCode,即在启动活动时传入的请求码,第二个参数resultCode,即返回数据时传入的处理结果。第三个参数data,即携带着返回数据的Intent。在startActivityForResult()方法中我们首先应该通过检查检查requestCode判断数据来源,通过resultCode判断处理结果是否成功,最后从data中提取数据。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { //判断数据来源 case 1: //判断数据处理结果 if(resultCode == RESULT_OK) { //获取数据 String backData = data.getStringExtra("back_data"); Toast.makeText(this, backData, Toast.LENGTH_SHORT).show(); } break; } }
相关文章推荐
- 第二行代码学习笔记——第二章:先从看得到的入手——探究活动
- 第二行代码学习笔记——第二章:先从看得到的入手——探究活动
- 第二行代码学习笔记——第二章(2)
- Material Design 学习之Toolbar(第二行代码笔记)
- 第一行代码学习笔记-第二章 探究活动-3.活动的生命周期
- 第二行代码学习笔记——第十章:后台默默的劳动者——探究服务
- 第一行代码学习笔记-第二章 探究活动-4.活动的启动模式
- 第一行代码学习笔记-第二章 探究活动-1.活动的基本用法
- 第二行代码学习笔记——第十二章:最佳的 UI 体验——Material Design 实战
- 第二行代码学习笔记之第一章
- 第一行代码学习笔记第二章——探究活动
- 第二行代码学习笔记之第一章
- 第二行代码学习笔记——第五章:全局大喇叭——详解广播机制
- 第二行代码学习笔记——第一章:开始启程——你的第一行Android代码
- 第二行代码学习笔记——第十一章:Android特色开发——基于位置的服务
- 第一行代码学习笔记-第二章 探究活动-2.Intent的使用
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
- 第二行代码学习笔记——第七章:跨程序共享数据——探究内容提供器
- 第二行代码学习笔记——第九章:看看精彩的世界——使用网络技术
- 第二行代码学习笔记——第八章:丰富你的程序——运行手机多媒体