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

本文主要是介绍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 };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, names);// 设置该窗口显示的列表所需的AdaptersetListAdapter(adapter);}// 根据列表项返回指定Activity对应的Intent@Overrideprotected 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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 创建一个可展开的列表组件ExpandableListAdapter对象ExpandableListAdapter adapter = new BaseExpandableListAdapter() {// 每一个列表的字符数组private String[] roleTypes = new String[] { "圣职者", "神枪手", "鬼剑士","法师", "暗夜使者" };// 每个列表下面的子列表字符数组private String[][] roles = new String[][] {{ "蓝拳", "驱魔", "圣骑士", "复仇者" }, { "漫游", "大枪", "弹药", "机械" },{ "剑魂", "红眼", "阿修罗", "鬼泣" },{ "战斗法师", "魔法师", "元素师", "召唤师" }, { "刺客", "死灵" } };@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition) {return true;}@Overridepublic boolean hasStableIds() {return true;}// 构建每个父列表组件@Overridepublic 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;}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic int getGroupCount() {return roleTypes.length;}@Overridepublic Object getGroup(int groupPosition) {return roleTypes[groupPosition];}@Overridepublic 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;}// 构建子列表的数据@Overridepublic 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;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic 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" ><!-- 设置系统铃声 --><RingtonePreferenceandroid:key="ring_key"android:ringtoneType="all"android:showDefault="true"android:showSilent="true"android:summary="选择铃声(测试RingtonePreference)"android:title="设置铃声" /><PreferenceCategory android:title="个人信息设置组" ><!-- 通过输入框填写用户名 --><EditTextPreferenceandroid:dialogTitle="您所使用的用户名为:"android:key="name"android:summary="请填写您的用户名(测试EditTextPreference)"android:title="填写用户名" /><!-- 通过列表框选择性别 --><ListPreferenceandroid: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="系统功能设置组" ><CheckBoxPreferenceandroid: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>





 

这篇关于Android中LauncherActivity、PreferenceActivity、ExpandableListActivity的综合运用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966283

相关文章

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio