android应用的多个activity组成activity栈
4.1.2 配置activity
配置activity时通常指定如下三个属性:
name:指定该activity的实现类的类名
icon:指定该activity对应的图标
label:指定该activity的标签
此外,通常还会指定一个或多个<intent-filter…/>元素,该元素用于指定该activity可响应的intent。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.crazyit.activity"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".OtherActivity"
android:label="@string/app_name">
<!-- 指定该Activity是程序的入口 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 定义两个Activity -->
<activity android:name=".ExpandableListActivityTest"
android:label="查看星际兵种">
</activity>
<activity android:name=".PreferenceActivityTest"
android:label="设置程序参数">
</activity>
</application>
</manifest>
4.1.3
activity启动其他activity有如下两种方法:
startActivity(Intent intent): 启动其他activity
startActivityForResult(Intent intent,int requestCode):以指定的请求码(requestCode)启动activity,而且程序将会等到新启动的activity的结果(通过重写onActivityResult()方法来获取)
android关闭activity有如下两种方法:
finish() 结束当前activity
finishActivity(int requestCode): 结束以startActivityForResult(Intent intent,int requestCode)方法启动的activity。
4.1.4 使用Bundle在activity之间交换数据
Intent提供了多个重载的方法来“携带”数据:
putExtras(Bundle data):向Intent中放入要“携带”的数据
Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据。
putXxx(String key,Xxx data):向Bundle放入int,long等各种类型的数据。
putSerializable(String eky , Serializable data):向Bundle中放入一个可序化的对象。
取出数据:
getXxx(String key):
getSerializable(String eky , Serializable data)
Person p = new Person(name.getText().toString()
, passwd.getText().toString() , gender);
//创建一个Bundle对象
Bundle data = new Bundle();
data.putSerializable("person", p);
//创建一个Intent
Intent intent = new Intent(BundleTest.this
, ResultActivity.class);
intent.putExtras(data);
//启动intent对应的Activity
startActivity(intent);
publicclass Person implements Serializable
{
//获取启动该Result的Intent
Intent intent = getIntent();
//获取该intent所携带的数据
Bundle data = intent.getExtras();
//从Bundle数据包中取出数据
Person p = (Person)data.getSerializable("person");
name.setText("您的用户名为:" + p.getName());
passwd.setText("您的密码为:" + p.getPass());
gender.setText("您的性别为:" + p.getGender());
4.1.5 启动其他activity并返回结果
startActivityForResult(Intent intent , int requestCode)
返回时自动回调onActivityResult(int requestCode , int resultCode,Intent data)
//创建需要对应于目标Activity的Intent
Intent intent = new Intent(ActivityForResult.this
, SelectCityActivity.class);
//启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求
startActivityForResult(intent , 0);
publicvoid onActivityResult(int requestCode , int resultCode
, Intent intent)
{
//当requestCode、resultCode同时为0,也就是处理特定的结果
if (requestCode == 0
&& resultCode == 0)
{
//取出Intent里的Extras数据
Bundle data = intent.getExtras();
//取出Bundle中的数据
String resultCity = data.getString("city");
//修改city文本框的内容
city.setText(resultCity);
}
}
//获取启动该Activity之前的Activity对应的Intent
Intent intent = getIntent();
Bundle data = new Bundle();
data.putString("city" ,cities[groupPosition][childPosition]);
intent.putExtras(data);
// 设置该SelectActivity的结果码,并设置结束之后退回的Activity
SelectCityActivity.this.setResult(0 , intent);
//结束SelectCityActivity。
SelectCityActivity.this.finish();
returnfalse;
对于一个具有通用性质的程序架构来说,程序架构完成整个应用的通用功能,流程,但在某个特定的点上,需要一段业务相关的代码—通用的程序架构无法实现这段代码,那么程序架构会在这个点上留一个“空”。
对于java程序来说,程序架构在某点溜的“空”,可以有如下形式存在。
1, 以接口形式存在:该接口由开发者实现,实现该接口时将会实现该接口的方法,那么通用的程序架构就会回调该方法来完成业务相关的处理。
2, 以抽象方法(也可以是非抽象方法)形式存在:这就是activity的实现形式。这些特定的点上方法已经被定义了,如onCreat,onActivityResult等方法,开发者可以选择重写这些方法,通用的程序架构就会回调该方法来完成业务相关的处理。