4.1 建立、配置和使用Activity


Activity主要负责与用户交互,并向用户呈现应用状态。

4.1.1 高级Activity

在这里插入图片描述

4.1.2 配置Activity

Android应用要求所有应用程序组件(Activity、Service、ContentProvider、BroadcastReceiver)都必须显示进行配置。

只要在AndroidManifest.xml中为<application>元素添加<activity>子元素即可配置Activity。
常用属性:

  • name:指定该Activity的实现类的名称
  • icon:指定该Activity对应的图标
  • label:指定该Activity的标签
  • exported:指定该Activity是否允许被其他应用调用。
  • launchMode:指定该Activity的加载模式,该属性支持standard、singleTop、singleTask和singleInstance这四种加载模式。

此外,在配置Activity时通常还需要指定一个或多个<intent-filter>元素,该元素用于指定该Activity可响应的Intent。

如果如下配置Activity,那么该Activity将成为应用的主活动,也就是应用程序的入口。

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

4.1.3 启动、关闭Activity

启动Activity

Activity启动其他Activity有两个方法:

  • startActivity(Intent intent):启动其他Activity。
  • startActivityForResult(Intent intent,int requestCode):以指定的请求码(requestCode)启动Activity,而且程序会获取新启动Activity返回的结果(通过重写onActivityResult()方法来获取)。

Intent:“意图”——用来表达想要启动哪一个组件(Activity或Service)。
requestCode:请求码的值由开发者根据业务自行设置,用于标识请求来源。

关闭Activity

两个方法:

  • finish():结束当前Activity。
  • finishActivity(int requestCode):结束以请求码requestCode启动的Activity。

使用Bundle在Activity之间交换数据

因为两个活动通过Intent产生联系,所以将需要交换的数据放入Intent即可。
Intent的相关方法:

  • putExtras(Bundle data):向Intent中放入需要携带的数据包。
  • Bundle getExtras():取出Intent中所携带的数据包。
  • putExtra(String name,Xxx value):向Intent中按key-value对的形式存入数据。
  • getXxxExtra(String name):从Intent中按key取出指定类型的数据。

Bundle是一个简单的数据携带包,Bundle中包含的方法:

  • putXxx(String key,Xxx value):向Bundle中放入Int、Long、Serializable等各种类型的数据。
  • getXxx(String key):从Bundle中取出Int、Long、Serializable等各种类型的数据。

注意:

  • 既然Intent携带Bundle来传递数据,且Bundle已经包含了putXxx(String key,Xxx value)和getXxx(String key)两个传入数据和获取数据的方法,那么为什么Intent也包含putExtra(String name,Xxx value)和getXxxExtra(String name)两个传入数据和获取数据的方法呢?这是因为Intent提供的putExtra(String name,Xxx value)和getXxxExtra(String name)时便捷的方法,这些方法依然是存取Intent所携带的Bundle中的数据。
  • Intent的putExtra(String name,Xxx value)方法是智能的。调用该方法时,如果Intent已结携带了Bundle对象,那么该方法直接向该Bundle对象存入数据;如果Intent没携带Bundle对象,那么该方法会先为Intent创建一个Bundle对象,再向Bundle中存入数据。

启动其他Activity并返回结果

应用场景:应用程序第一个界面需要用户进行选择,但需要选择的列表数据比较复杂,必须启动另一个Activity让用户选择。当用户在第二个Activity选择完成之后,程序返回第一个Activity,第一个Activity必须能获取并显示用户在第二个Activity中选择的结果。这种应用场景下,也是通过Bundle进行数据交换的。

获取被启动Activity所返回的结果,需要两个步骤:

  • 当前Activity需要重写onActivityResult(int requestCode, int resultCode, Intent intent),当被启动的Activity返回结果时,该方法将会被触发,其中requestCode代表请求码,而resultCode代表结果码,这个结果码也是由开发者根据业务自行设定的。当一个Activity包含多个onActivityResult(int requestCode, int resultCode, Intent intent)方法来打开多个不同的Activity处理不同的业务——为了知道该方法是由那个请求的结果所触发的,可利用requestCode请求码;为了知道返回的数据来自哪个被启动的Activity,可以用resultCode结果码。
  • 被启动的Activity需要调用setResult()方法设置处理结果。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值