Android中LauncherActivity、PreferenceActivity、ExpandableListActivity的综合运用

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

1.LauncherActivity继承了ListActivity,因此它本质上也是一个开发列表界面的Activity,但它开发出来的列表界面与普通列表界面有所不同。它的每个列表项都对应一个Intent,用户单击不同的列表项时,应用程序会自动启动对应的Activity。继承LauncherActivity时通常应该重写intentForPosition()方法,该方法根据不同列表项返回不同的Intent。

2.PreferenceActivity专门用于设置选项参数并进行保存,对于PreferenceActivity,我们不再使用普通的界面布局文件,不再使用XxxLayout作为根元素,而是使用PreferenceScreen作为根元素,它表明定义一个参数设置的界面布局。

3.至于ExpandableListActivity,用于显示一个可展开的列表窗口。

下面通过一个简单实例来演示它们的使用,主界面是LauncherActivity,它的两个列表项是PreferenceActivity和ExpandableListActivity,代码如下:

LauncherActivity:

package com.lovo.activity;

import android.os.Bundle;
import android.app.LauncherActivity;
import android.content.Intent;
import android.widget.ArrayAdapter;

public class MainActivity extends LauncherActivity {
	// 定义两个Activity的名称
	private String[] names = { "查看DNF游戏角色", "设置程序参数" };
	// 定义两个Activity对应的实现类
	private Class<?>[] clazzs = { ExpandableListActivityTest.class,
			PreferenceActivityTest.class };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, names);
		// 设置该窗口显示的列表所需的Adapter
		setListAdapter(adapter);
	}

	// 根据列表项返回指定Activity对应的Intent
	@Override
	protected Intent intentForPosition(int position) {
		return new Intent(MainActivity.this, clazzs[position]);
	}
}

ExpandableListActivity:

package com.lovo.activity;

import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ExpandableListActivityTest extends ExpandableListActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 创建一个可展开的列表组件ExpandableListAdapter对象
		ExpandableListAdapter adapter = new BaseExpandableListAdapter() {
			// 每一个列表的字符数组
			private String[] roleTypes = new String[] { "圣职者", "神枪手", "鬼剑士",
					"法师", "暗夜使者" };
			// 每个列表下面的子列表字符数组
			private String[][] roles = new String[][] {
					{ "蓝拳", "驱魔", "圣骑士", "复仇者" }, { "漫游", "大枪", "弹药", "机械" },
					{ "剑魂", "红眼", "阿修罗", "鬼泣" },
					{ "战斗法师", "魔法师", "元素师", "召唤师" }, { "刺客", "死灵" } };

			@Override
			public boolean isChildSelectable(int groupPosition,
					int childPosition) {

				return true;
			}

			@Override
			public boolean hasStableIds() {

				return true;
			}

			// 构建每个父列表组件
			@Override
			public View getGroupView(int groupPosition, boolean isExpanded,
					View convertView, ViewGroup parent) {
				// 创建一个LinearLayout对象
				LinearLayout ll = new LinearLayout(
						ExpandableListActivityTest.this);
				ll.setOrientation(0);
				TextView textView = getTextView();
				// 根据groupPosition取roleTypes对应文本作为textView显示的文本内容
				textView.setText(getGroup(groupPosition).toString());
				ll.addView(textView);
				return ll;
			}

			@Override
			public long getGroupId(int groupPosition) {
				return groupPosition;
			}

			@Override
			public int getGroupCount() {

				return roleTypes.length;
			}

			@Override
			public Object getGroup(int groupPosition) {

				return roleTypes[groupPosition];
			}

			@Override
			public int getChildrenCount(int groupPosition) {

				return roles[groupPosition].length;
			}

			/**
			 * 在MainActivity里创建TextView组件
			 * 
			 * @return TextView
			 */
			private TextView getTextView() {
				AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
						ViewGroup.LayoutParams.MATCH_PARENT, 64);
				TextView textView = new TextView(
						ExpandableListActivityTest.this);
				textView.setLayoutParams(lp);
				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
				textView.setPadding(36, 0, 0, 0);
				textView.setTextSize(20);
				return textView;
			}

			// 构建子列表的数据
			@Override
			public View getChildView(int groupPosition, int childPosition,
					boolean isLastChild, View convertView, ViewGroup parent) {
				TextView textView = getTextView();
				// 根据groupPosition和childPosition取roles中对应文本作为textView显示的内容
				textView.setText(getChild(groupPosition, childPosition)
						.toString());
				return textView;
			}

			@Override
			public long getChildId(int groupPosition, int childPosition) {

				return childPosition;
			}

			@Override
			public Object getChild(int groupPosition, int childPosition) {

				return roles[groupPosition][childPosition];
			}
		};
		setListAdapter(adapter);
	}
}

PreferenceActivity:

package com.lovo.activity;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class PreferenceActivityTest extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	//设置布局
	addPreferencesFromResource(R.xml.preference);
}
}

PreferenceActivity布局XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 设置系统铃声 -->
    <RingtonePreference
        android:key="ring_key"
        android:ringtoneType="all"
        android:showDefault="true"
        android:showSilent="true"
        android:summary="选择铃声(测试RingtonePreference)"
        android:title="设置铃声" />

    <PreferenceCategory android:title="个人信息设置组" >

        <!-- 通过输入框填写用户名 -->
        <EditTextPreference
            android:dialogTitle="您所使用的用户名为:"
            android:key="name"
            android:summary="请填写您的用户名(测试EditTextPreference)"
            android:title="填写用户名" />
        <!-- 通过列表框选择性别 -->
        <ListPreference
            android:dialogTitle="ListPreference"
            android:entries="@array/gender_name_list"
            android:entryValues="@array/gender_value_list"
            android:key="gender"
            android:summary="请选择您的性别(测试ListPreference)"
            android:title="性别" />
    </PreferenceCategory>
    <PreferenceCategory android:title="系统功能设置组" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="autoSave"
            android:summaryOff="自动保存:关闭"
            android:summaryOn="自动保存:开启"
            android:title="自动保存进度" />
    </PreferenceCategory>

</PreferenceScreen>


引用的数组XML:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="gender_name_list">
        <item>男</item>
        <item>女</item>
    </string-array>
    <string-array name="gender_value_list">
        <item>1</item>
        <item>0</item>
    </string-array>

</resources>





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值