package com.wind;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ExpandableListViewAdapter extends BaseExpandableListAdapter {
private Context context;
private List<ListRow> groupList = new ArrayList<ListRow>();
private List<List<ListRow>> childList = new ArrayList<List<ListRow>>();
public ExpandableListViewAdapter(Context context, List<ListRow> groupList,
List<List<ListRow>> childList) {
this.context = context;
this.groupList = groupList;
this.childList = childList;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
ListRow row = (ListRow) childList.get(groupPosition).get(childPosition);
ListRowView view = new ListRowView(context, row, groupPosition, childPosition);
return view;
}
@Override
public int getChildrenCount(int groupPosition) {
return childList.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public int getGroupCount() {
return groupList.size();
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
ListRow row = (ListRow) groupList.get(groupPosition);
List<RowContent> viewContents = row.getRowContents();
for(int i = 0; i < viewContents.size(); i++) {
RowContent content = viewContents.get(i);
if(content.getType() == ConstantUtils.EXPAND_IMAGE) {
if(isExpanded) {
content.setImage_id(R.drawable.btn_expand2);
}else {
content.setImage_id(R.drawable.btn_expand);
}
}
}
ListRowView view = new ListRowView(context, row, groupPosition, 0);
return view;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
public static class ListRow {
private int rowType;
private boolean selectable;
private int layout_id;
private boolean isChecked;
private List<RowContent> rowContents = new ArrayList<RowContent>();
private int index;
public int getRowType() {
return rowType;
}
public void setRowType(int rowType) {
this.rowType = rowType;
}
public boolean isSelectable() {
return selectable;
}
public void setSelectable(boolean selectable) {
this.selectable = selectable;
}
public int getLayout_id() {
return layout_id;
}
public void setLayout_id(int layoutId) {
layout_id = layoutId;
}
public List<RowContent> getRowContents() {
return rowContents;
}
public void setRowContents(List<RowContent> rowContents) {
this.rowContents = rowContents;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
}
public static class RowContent {
private int type;
private int layout_id;
private String text;
private int image_id = -1;
private int color = Color.WHITE;
public int getImage_id() {
return image_id;
}
public void setImage_id(int imageId) {
image_id = imageId;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getLayout_id() {
return layout_id;
}
public void setLayout_id(int layoutId) {
layout_id = layoutId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
}
public class ListRowView extends LinearLayout {
public ListRow row;
private int groupIndex;
private int childIndex;
private Context context;
public ListRowView(Context context, ListRow row, int groupIndex, int childIndex) {
super(context);
this.context = context;
this.row = row;
this.groupIndex = groupIndex;
this.childIndex = childIndex;
addView(inflate(context, row.getLayout_id(), null));
setData(row);
}
public ListRow getRow() {
return row;
}
public void setData(ListRow row) {
List<RowContent> viewContents = row.getRowContents();
if ((viewContents != null) && (viewContents.size() > 0)) {
for (RowContent viewContent : viewContents) {
int type = viewContent.getType();
int layout_id = viewContent.getLayout_id();
switch (type) {
case ConstantUtils.TEXT:
TextView textView = (TextView)this.findViewById(layout_id);
if(textView != null) {
textView.setText(viewContent.getText());
if(viewContent.getColor() != Color.WHITE)
textView.setTextColor(viewContent.getColor());
}
break;
case ConstantUtils.EXPAND_IMAGE:
case ConstantUtils.IMAGE:
int icon_id = viewContent.getImage_id();
if(icon_id != -1)
((ImageView)this.findViewById(layout_id)).setBackgroundResource(icon_id);
break;
case ConstantUtils.EDIT_TEXT:
EditText editText = (EditText)this.findViewById(layout_id);
if(editText != null) {
editText.setText(viewContent.getText());
}
// editText.setOnFocusChangeListener(focus_listener_noIM);
// editText.setOnTouchListener(touch_listener_noIM);
break;
case ConstantUtils.CHECK_BOX:
CheckBox cb = (CheckBox) this.findViewById(layout_id);
cb.setChecked(row.isChecked());
cb.setOnCheckedChangeListener(checkBoxListener);
break;
case ConstantUtils.BUTTON:
Button delete = (Button) this.findViewById(layout_id);
delete.setOnClickListener(deleteButtonOnClick);
break;
default:
break;
}
}
}
}
private OnClickListener deleteButtonOnClick = new OnClickListener() {
@Override
public void onClick(View v) {
Dialog dialog = null;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert).setTitle(
"您确定要刪除该项?").setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
childList.get(groupIndex).remove(childIndex);
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
dialog = builder.create();
dialog.show();
}
};
private OnCheckedChangeListener checkBoxListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
row.setChecked(isChecked)
模仿QQ的扩展型很好的ExpandableListView.rar
需积分: 0 41 浏览量
更新于2024-09-21
收藏 427KB RAR 举报
Android是由Google开发的开源移动操作系统,广泛应用于智能手机、平板电脑、智能电视等设备。它以Linux内核为基础,结合了丰富的应用编程接口(API)和强大的开发工具,支持多种编程语言如Java、Kotlin和C++,为开发者提供了灵活性和扩展性。
主要内容
架构层次:
Linux内核:Android的底层使用Linux内核,提供了硬件抽象、进程管理、安全性等功能,是操作系统的核心部分。
Android运行时(ART):负责运行应用程序,并提供了垃圾回收、线程管理等服务。ART相比早期的Dalvik虚拟机,提升了性能并降低了内存占用。
应用框架:开发者可以通过Android的API访问系统功能,例如图形用户界面、网络、数据库、传感器等。这一层还包括Activity、ContentProvider、BroadcastReceiver和Service等核心组件。
应用层:这是Android设备用户能直接交互的层级,应用程序通过系统API与系统交互。用户可以通过Google Play等平台下载和安装应用。
开发工具:
Android Studio:这是官方集成开发环境(IDE),支持Java和Kotlin语言,提供了丰富的开发工具集,包括代码编辑器、调试工具、设备仿真器等。Android Studio集成了Gradle作为构建系统,使项目的依赖管理和构建过程更加灵活和自动化。
Android SDK:Android SDK包含了开发Android应用的基础工具和库,包括系统API、调试工具(ADB)以及Android模拟器。
应用程序组件:
Activity:代表应用的一个单独屏幕,负责管理界面元素的展示和用户交互。
Service:在后台执行长时间运行的任务,不提供用户界面,常用于播放音乐、处理网络请求等。
BroadcastReceiver:响应系统或应用内广播,例如电池状态变化、网络连接变化等。
ContentProvider:用于在应用间共享数据,可以通过URI来访问应用的数据。
版本演进: Android每年发布一个新的版本,每个版本都有一个代码名(通常是甜点名称),并带来一系列的功能改进和性能优化。例如:
Android 4.0 Ice Cream Sandwich:引入统一的设计语言,并改进多任务管理。
Android 5.0 Lollipop:引入Material Design设计语言,优化用户界面和交互体验。
Android 10:取消甜点名称,以数字命名,增加了黑暗模式和隐私功能。

零度°
- 粉丝: 1969
最新资源
- 基于RabbitMQ实现分布式事务最终一致性的高可靠消息中间件_分布式事务解决方案_消息队列可靠性投递_两阶段确认机制_生产级消息补偿_SpringBoot集成_支付系统跨服务调用.zip
- 基于Pytorch框架的Unet图像分割模型训练与测试项目_包含Se-ResNext50和Se-ResNext101两种骨干网络_支持多尺度训练和TTA测试增强_用于工业缺陷检测和.zip
- 基于React_AntDesign_Dva_Umi技术栈开发的企业级中后台管理系统模板_包含细粒度权限控制方案_封装常用数据组件_支持路由和按钮级权限验证_提供全自动数据表格组件_.zip
- 基于ReactNative构建的多端一体化App开发解决方案_提供SDK框架工具服务多位一体的跨平台开发方案_包含通用UI组件智能业务组件ListView组件Chat组件等丰富生态.zip
- 基于React_Native和Redux框架开发的跨平台电商类移动应用_包含广告模块_文章模块_用户模块_产品模块_购物车模块_订单模块_地址模块_分享收藏功能_营销系统_支持下拉.zip
- 基于React的企业级中后台前端解决方案_提供开箱即用的UI组件和模板_包含Dashboard分析监控工作台_表单列表详情页等典型场景_支持响应式布局和主题定制_内置国际化方案和M.zip
- 基于ReactReduxViteAntd构建的企业级后台管理系统脚手架_包含动态菜单配置按钮级权限控制用户角色管理权限菜单管理前后端分离架构_用于快速开发标准化的企业.zip
- 基于React和Koa的完整前端技术解决方案_Kootjs_提供服务器端渲染SSR支持实现快速载入和SEO优化_支持多端代码输出和零配置热更新及TypeScript_包含多语言支.zip
- 基于React框架的移动端vw视口单位适配解决方案_包含postcss-aspect-ratio-mini_postcss-px-to-viewport_postcss-write.zip
- 基于React框架开发的大文件上传解决方案_支持文件切片上传_断点续传_秒传功能_自动重试机制_进度条显示_并发控制_前端文件上传组件_用于企业级文件管理系统_云存储平台_网盘应用.zip
- 基于React和Nextjs构建的轻量级前端渲染框架_支持SSR服务端渲染和静态生成_提供SEO友好的网页解决方案_适用于内容型网站和电商平台_包含路由管理_状态管理_性能优化_.zip
- 基于Ruby和Fastlane的iOS超级签自动化解决方案_苹果开发者证书管理_设备UDID注册_BundleID生成_描述文件更新_IPA重签名_mobileconfig签名_支.zip
- 基于RoBERTa_wwm_ext和UER_mixed模型的微博情感分类系统_包含数据清洗_K折交叉验证_多模型集成_注意力机制_迁移学习_对抗训练_情感分析_文本分类_深度学习_.zip
- 基于Sora框架的Terraria服务器TShock插件式QQ机器人_实现游戏服务器与QQ群实时交互_自动化管理玩家_查询服务器状态_执行游戏指令_推送服务器公告_玩家数据统计_游.zip
- 基于Spring_Cloud的分布式事务解决方案实现_包含可靠消息最终一致性_TCC补偿性_最大努力通知型三种模式_提供完整代码示例与详细文档说明_适用于电商_金融等需要高一致性场.zip
- 基于Spring_Cloud_Netflix的分布式事务解决方案_采用TCC变体TCD模式_实现微服务间一致性_包含Try-Confirm-Diagnose流程_支持生单扣款扣库存.zip