android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法
本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法。分享给大家供大家参考,具体如下:
一、我们要做什么?
上面有个搜索框,下面是一个二级下拉菜单。
输入查询内容,下面列表将显示查询结果。
二、界面设计
(1)这是主框架(部分属性已经省去,请看源码),从上至下分别是文本框,列表,二级列表。
android:id="@+id/city_middle">
android:id="@+id/txtfind"
android:hint="请输入" >
android:id="@+id/listfind" >
android:id="@+id/exList" />
(2)一级菜单栏样式,图片将区别是否展开
android:id="@+id/group" >
android:id="@+id/tubiao">
(3)二级菜单栏样式
android:id="@+id/child">
三、代码设计
(1) 定义菜单对应数据
public static List fatherList = new ArrayList();
public static List> childList = new ArrayList>();
生成测试数据
for (int i = 0; i < 20; i++) {
fatherList.add(new BasicNameValuePair("father" + i, "father" + i));
List cList = new ArrayList();
for (int j = 0; j < 5; j++) {
cList.add(new BasicNameValuePair("child" + i + ":" + j, "child"
+ i + ":" + j));
}
childList.add(cList);
}
(2)定义列表适配器
protected class ListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
//查询结果列表
private List list = new ArrayList();
public ListAdapter(Context context, String strin) {
mInflater = LayoutInflater.from(context);
//查询匹配
for (int i = 0; i < childList.size(); i++) {
for (int j = 0; j < childList.get(i).size(); j++) {
String tmp = childList.get(i).get(j).getValue();
if (tmp.indexOf(strin) >= 0) {
list.add(new BasicNameValuePair(childList.get(i).get(j)
.getName(), tmp));
}
}
}
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
convertView = mInflater.inflate(R.layout.child, null);
TextView title = (TextView) convertView.findViewById(R.id.child);
title.setText(list.get(position).getValue());
return convertView;
}
}
初始化列表,默认为隐藏
list = (ListView) findViewById(R.id.listfind);
list.setVisibility(View.GONE);
(3)定义二级列表适配器
protected class ExAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return fatherList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return childList.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return fatherList.get(groupPosition).getValue();
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childList.get(groupPosition).get(childPosition).getValue();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.group, null);
}
TextView t = (TextView) view.findViewById(R.id.group);
t.setText(fatherList.get(groupPosition).getValue());
//展开,改变图片
ImageView gImg = (ImageView) view.findViewById(R.id.tubiao);
if (isExpanded)
gImg.setBackgroundResource(R.drawable.mm_submenu_down_normal);
else
gImg.setBackgroundResource(R.drawable.mm_submenu_normal);
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.child, null);
}
TextView t = (TextView) view.findViewById(R.id.child);
t.setText(childList.get(groupPosition).get(childPosition)
.getValue());
return view;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
初始化二级菜单
exList = (ExpandableListView) findViewById(R.id.exList);
exList.setAdapter(new ExAdapter());
exList.setGroupIndicator(null);
exList.setDivider(null);
(4)搜索事件,输入改变即触发
txtFind = (EditText) findViewById(R.id.txtfind);
txtFind.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s != null && !s.toString().equals("")) {
list.setAdapter(new ListAdapter(DWinterDemoActivity.this, s
.toString()));
list.setVisibility(View.VISIBLE);
exList.setVisibility(View.GONE);
} else {
list.setVisibility(View.GONE);
exList.setVisibility(View.VISIBLE);
}
}
});
(5)去除焦点自动弹出输入
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
希望本文所述对大家Android程序设计有所帮助。
android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法相关推荐
- html下拉菜单原理,HTML5 教程之CSS 下拉菜单
CSS 下拉菜单 使用 CSS 创建一个鼠标移动上去后显示下拉菜单的效果. 下拉菜单实例 实例演示 1 文本下拉菜单 实例演示 2 下拉菜单 实例演示 3 基本下拉菜单 当鼠标移动到指定元素上时,会出 ...
- html鼠标经过自动下拉菜单,js css鼠标悬停显示下拉菜单
个人信息维护 学生信息修改 修改密码--%> 修改密码--%> 修改密码--%> 退出 登录用户: 所在班级: js文件 //个人信息维护下拉菜单样式 $(function () { ...
- 【下拉菜单】随前一个下拉菜单内容变化而变化的下拉菜单
<body><form id="form1" runat="server" method="post"><!- ...
- dw二级联动下拉菜单插件 宋君墨_Excel下拉菜单不会做?15秒教会你制作一二三级联动下拉菜单,从此做表不求人!...
Hi,各位叨友们好呀!我是叨叨君~ 我们都知道,在使用Excel表格统计数据的时候,为了方便录入,通常会在Excel中设置下拉菜单,以便我们输入相同的内容. 那么,Excel中一级.二级.三级联动下拉 ...
- C语言下拉式菜单做出字体小,C语言下拉菜单设计-带源代码.ppt
<C语言下拉菜单设计-带源代码.ppt>由会员分享,可在线阅读,更多相关<C语言下拉菜单设计-带源代码.ppt(30页珍藏版)>请在人人文库网上搜索. 1.C语言下拉菜单程序设 ...
- css菜单下拉菜单_在CSS中创建下拉菜单
css菜单下拉菜单 CSS | 创建下拉菜单 (CSS | Creating Dropdown) Trivia: 琐事: We know the importance of navigation ba ...
- 仿美团下拉菜单 html,React Native仿美团下拉菜单的实例代码
本文介绍了React Native仿美团下拉菜单的实例代码,最近也在学习React Native,顺便分享给大家 在很多产品中都会涉及到下拉菜单选择功能,用的最好的当属美团了,其效果如下: 要实现上面 ...
- 华为手机下拉菜单变大_华为手机下拉菜单变少了 华为下拉通知栏变白色
华为荣耀7的下拉菜单不见了怎么办? 1.在手机桌面上找到[设置]按钮,点击"设置"去设置界面找回2.点击"设置"后,进入"常用设置",在右边 ...
- iphone下拉菜单卡住了_苹果手机怎么下拉菜单 苹果x右上角下拉失灵怎么办
苹果手机下拉菜单怎么设置? 苹果手机下拉菜单的设置步骤如下: 1.打开主屏上的设置应用 2.在设置列表中找到控制中心一栏,点击进入 3.接下来请关闭在控制中心列表下的二个选项 4.随后我们再重新打开这 ...
- 用php完成下拉菜单,最新的8个实现下拉菜单功能的总结
在计算机应用中,下拉式选单是选单的一种表现形式.具体表现为:当用户选中一个选项后,该选单会向下延伸出具有其他选项的另一个选单.下拉式选单通常应用于把一些具有相同分类的功能放在同一个下拉式选单中,并把这 ...
最新文章
- How to track an installation through client log-fi
- 【Python】青少年蓝桥杯_每日一题_5.09_画三角形和六边形
- Siverlight5新功能/改进总结
- 为最快动脉线诊断 铁科院联合第四范式完成高铁智能化巡检应用
- lbp7660cdn设置网络打印_一篇文章弄懂局域网打印机共享
- 用台球杆击球,这个击球力道能传递到10米之外的球上吗?
- 【Python学习】 - sklearn学习 - 评估指标precision_score的参数说明
- c语言int类型乘法溢出_【原创】C语言指针自我总结
- Linux下硬盘性能测试
- Linux中Shell重定向
- python 利用栈实现复杂计算器
- 2022-2028年中国海上石油勘探行业市场研究及前瞻分析报告
- 截止失真放大电路_新手必看!基本放大电路应该如何分析?
- pip install:Requirement already satisfied
- 经典面试题:64匹马,8个赛道,找出前4名最少比赛多少场?
- win10提示bitlocker加密的硬盘需要格式化
- python 拆分excel工作表_Python合并拆分excel
- NXP Nfc模块Framework层移植遇到的坑【二】
- Rational Rose 2007简单介绍及详细安装步骤
- nyoj 1239 引水工程【最小生成树】虚拟节点