Android ListActivity和实例分析

来源:互联网 发布:linux tomcat启动java 编辑:程序博客网 时间:2024/05/16 18:15

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>

      关键点在这里,至于源码,大家可以自己去看,个人比较懒,不再做分析

原创粉丝点击