第四章 Android开发三大基石—Activity、Service和Handler(3)
来源:互联网 发布:美国数据公布时间表 编辑:程序博客网 时间:2024/04/27 21:22
4.1.5Activity交互—Activity跳转
一般的,我们的应用程序都不会简单到只有一个界面,而是会有很多个界面,这个时候我们就会创建多个Activity,然后根据业务逻辑在多个Activity之间进行跳转。
我们可以用切换Layout的方式进行手机页面间的转换。但是如果要转换的页面并不单单只是背景、颜色或文字内容的不同,而是需要对整个Activity进行置换,并将主控权交给新的Activity,那就不是仅靠改变Layout就能完成了,我们需要在这些Activity中进行跳转及数据传递。
Activity跳转实现起来也非常简单,可以使用Intent来实现应用程序内部的Activity跳转。我们比较常用的有两种。一种是单纯的跳转,即跳转完之后就不管跳转前的Activity了,另一种是跳转到下一个Activity,并等待它的返回结果进行相关的操作。
下面,我们以一个简单的例子来加以说明。
1)一般的跳转
同样的,我们新建一个NextActivity.java类继承自Activity,它的布局文件中只有一个TextView,显示的内容为“This is Activity 2”。
假设我们刚刚创建的MyActivity.java为当前Activity,NextActivity.java为下一个要跳转Activity。我们在main.xml布局文件中,增加一个按钮,点击后实现从MyActivity.java跳转到NextActivity.java的效果,布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is Activity 1"/>
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转"/>
</LinearLayout>
然后,我们来看看MyActivity中的代码:
private Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.my_button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MyActivity.this, NextActivity.class);
startActivity(intent);
}
});
}
我们运行一下来看看效果,如图4-4所示:
图4-4 Activity跳转前
下面,我们点击一下按钮。这个时候,运行出错了,错误原因是“android.content.ActivityNotFoundException”,这是因为我们在AndroidManifest.xml文件中没有配置NextActivity,我们简单配置一下:
<activity android:name=".NextActivity" android:label="@string/app_name"/>
现在再点击按钮后,效果如图4-5所示:
图4-5 Activity跳转后
可以看到,跳转已经成功了。
2)跳转并返回值
可能很多时候,一般的跳转并不能满足我们的需求。例如,我们填好一个表单,提交之后出错了,我们回退之后想保留之前已填的数据,这样的话,仅仅只是简单的跳转就不能满足了。
下面,我们来看另一种跳转方式。在这个例子中,我们要实现从MyActivity跳转到NextActivity,并当MyActivity接收到NextActivity返回来的“信息”时,MyActivity中显示消息,MyActivity中跳转代码如下:
Intent intent = new Intent();
intent.setClass(MyActivity.this, NextActivity.class);
startActivityForResult(intent, 1);
这样就从MyActivity跳转到了NextActivity,并传入了一个请求码“1”。同时,我们需要在MyActivity.java中重写Activity中的onActivityResult方法,用于接收NextActivity.java中的返回码,代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case RESULT_OK:
// 当返回码为RESULT_OK时进行相关操作
if(requestCode == 1){
Toast.makeText(Char4Activity.this, "返回已收到", Toast.LENGTH_LONG).show();
}
break;
}
}
这里需要注意的是resultCode相当于一个开关,当NextActivity.java中的开关打开时, 就会进行相应的处理了。
修改NextActivity的onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.next);
setResult(RESULT_OK);
finish();
}
下面,我们来看看效果,如图4-6所示:
图4-6 Activity跳转后返回值
4.1.6 Activity中数据传递
很多时候,我们不是单单只进行Activity跳转,而是在进行Activity跳转的同时传递数据,这里我们就可以利用Android.os.Bundle对象封闭数据的能力,将所要传递的数据或参数通过Bundle来传递不同Activity间的数据。还以之前的代码为例,我们要实现从当前Activity跳转到下一个Activity的同时,并传入一个double型参数,一个String型参数,在MyActivity.java中代码如下:
Intent intent = new Intent();
intent.setClass(MyActivity.this, NextActivity.class);
Bundle bundle = new Bundle();
double height = 1.74;
String name = "li lei";
bundle.putDouble("height", height);
bundle.putString("name",name);
intent.putExtras(bundle);
startActivity(intent);
有一方发送参数,就必然有一方要接收参数。它的接收实现起来也很简单,在NextActivity.java中代码如下:
Bundle bundle = NextActivity.this.getIntent().getExtras();
double height = bundle.getDouble("height");
String name = bundle.getString("name");
经验分享:
需要注意的是,当执行startActivityForResult时,requestCode值需要>=0,否则,startActivityForResult就变成了 startActivity;另外,有这样一种情况,假设现在有两个Activity:A和B。Activity A使用startActivityForResult跳转到Activity B,跟踪后发现要跳转的Activity B并没有被立即启动,而是直接执行了Activity A的onActivityResult方法,原因是把要启动的Activity B的launchmode设置成singleTask了,这个时候它会先执行onActivityResult方法,然后再启动activity,所以就得不到我们想要的结果。
- 第四章 Android开发三大基石—Activity、Service和Handler(3)
- 第四章 Android开发三大基石—Activity、Service和Handler(1)
- 第四章 Android开发三大基石—Activity、Service和Handler(2)
- 第四章 Android开发三大基石—Activity、Service和Handler(4)
- 第四章 Android开发三大基石—Activity、Service和Handler(5)
- 第四章 Android开发三大基石—Activity、Service和Handler(6)
- 第四章 Android开发三大基石—Activity、Service和Handler(7)
- Android Activity/Service/Broadcaster三大组件之间互相调用
- Android Activity/Service/Broadcaster三大组件之间互相调用
- Android Activity/Service/Broadcaster三大组件之间互相调用
- Android Service通过Handler与Activity交互
- 在Activity和Service之外使用handler
- Handler实现Activity和Service通信
- 健康专家洪昭光谈生活方式与身心健康(八) —— 健康第四大基石(心理平衡)
- Android开发:Handler的使用(三)
- Android Activity.runOnUiThread() 和 Handler
- Android第四章Activity
- Activity、Service&Handler
- 创建,更新Sharepoint父列表和子列表的列表项
- MosaicDataset的高效存储显示小技巧
- 各种常用计算机视觉库
- 使用lag函数 统计环比 同比
- [北京活动] 产品经理第一课,免费培训,大拿云集
- 第四章 Android开发三大基石—Activity、Service和Handler(3)
- keepalived配置
- Docker中Ubuntu镜像添加openssh-server服务
- Java Abstract与Interface
- Git五分钟教程
- 微软源代码管理工具TFS2013安装与使用详细图文教程(Vs2013)-转载
- java事件处理机制(自定义事件)
- Unity摄像机的正交视图与透视图
- ubuntu安装软件之octave