1 Activity和ListActivity
简单理解,在安卓中,每一个activity对应于一个显示界面,每一个activity都是独占整个屏幕的;ListActivity类继承Activity类,默认绑定了一个ListView(列表视图)界面组件,并提供一些与列表视图、处理相关的操作。
ListView界面组件中的每一行(row)都可以被选择。我们可以借由设置一个onListItemClick函数,来得到用户正选择了哪一列的信息,并做后续处理。
看一个实例,下面这张图片是我们平板中窗口小部件的设置快捷方式的视图:
构造这个界面的activity就是继承于ListActivity的,点击列表中的每一项,都会进行相应的处理。
2 ListActivity的布局
ListActivity的布局有如下2种:
通过layout里面定义的xml文件进行布局;
通过实现protected Intent getTargetIntent() 方法来进行布局。
第一种方法不做讨论,我们详细解释一下第二种方法。Android对这个方法的解释是获取目标Intent,Android解析AndroidManifest.xml的时候会根据Intent的category找到
所有匹配的Intent,从而可以找到相应的activity。如此来说,我们可以定义一个Intent的category,把所有匹配该category的activity都加入到listActivity的ListItem中,然后通过onListItemClick执行相应的动作,下面的实例就是基于此。
3 窗口小部件中的设置快捷方式
效果图如上图所示,我们看一下它是如何构造的
在构造这个listactivity中定义了一个category
protected Intent getTargetIntent() {
Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
targetIntent.addCategory("com.android.settings.SHORTCUT");//定义com.android.settings.SHORTCUT策略
targetIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return targetIntent;
}
所有满足该策略的activity都会被加入到ListItem中
拿wifi这一项来说,在package/app/Settings/AndroidManifest.xml中有如下一段
<activity android:name="Settings$WifiSettingsActivity"
android:label="@string/wifi_settings"
android:configChanges="orientation|keyboardHidden|screenSize"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.settings.WIFI_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" /> //看到了没,策略在此
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.wifi.WifiSettings" />
<meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
android:resource="@id/wifi_settings" />
</activity>
关键点在这里,至于源码,大家可以自己去看,个人比较懒,不再做分析