服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android编程实现二级下拉菜单及快速搜索的方法

Android编程实现二级下拉菜单及快速搜索的方法

2021-04-12 10:19越冬越酷 Android

这篇文章主要介绍了Android编程实现二级下拉菜单及快速搜索的方法,以实例形式较为详细的分析了Android实现二级下拉菜单及快速搜索的布局与功能实现技巧,需要的朋友可以参考下

本文实例讲述了android编程实现二级下拉菜单及快速搜索的方法。分享给大家供大家参考,具体如下:

一、我们要做什么?

Android编程实现二级下拉菜单及快速搜索的方法

上面有个搜索框,下面是一个二级下拉菜单。

Android编程实现二级下拉菜单及快速搜索的方法

输入查询内容,下面列表将显示查询结果。

二、界面设计

(1)这是主框架(部分属性已经省去,请看源码),从上至下分别是文本框,列表,二级列表。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<linearlayout>
 <linearlayout
  android:id="@+id/city_middle">
  <edittext
   android:id="@+id/txtfind"
   android:hint="请输入" >
  </edittext>
  <listview
   android:id="@+id/listfind" >
  </listview>
  <expandablelistview
   android:id="@+id/exlist" />
 </linearlayout>
</linearlayout>

(2)一级菜单栏样式,图片将区别是否展开

?
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<linearlayout >
 <textview
  android:id="@+id/group" >
 </textview>
 <imageview
  android:id="@+id/tubiao">
 </imageview>
</linearlayout>

(3)二级菜单栏样式

?
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<linearlayout >
 <textview
  android:id="@+id/child">
 </textview>
</linearlayout>

三、代码设计

(1) 定义菜单对应数据

?
1
2
public static list<basicnamevaluepair> fatherlist = new arraylist<basicnamevaluepair>();
public static list<list<basicnamevaluepair>> childlist = new arraylist<list<basicnamevaluepair>>();

生成测试数据

?
1
2
3
4
5
6
7
8
9
for (int i = 0; i < 20; i++) {
 fatherlist.add(new basicnamevaluepair("father" + i, "father" + i));
 list<basicnamevaluepair> clist = new arraylist<basicnamevaluepair>();
 for (int j = 0; j < 5; j++) {
  clist.add(new basicnamevaluepair("child" + i + ":" + j, "child"
    + i + ":" + j));
 }
 childlist.add(clist);
}

(2)定义列表适配器

  1. protected class listadapter extends baseadapter { 
  2.   private layoutinflater minflater; 
  3.   //查询结果列表 
  4.   private list<basicnamevaluepair> list = new arraylist<basicnamevaluepair>(); 
  5.   public listadapter(context context, string strin) { 
  6.    minflater = layoutinflater.from(context); 
  7.    //查询匹配 
  8.    for (int i = 0; i < childlist.size(); i++) { 
  9.     for (int j = 0; j < childlist.get(i).size(); j++) { 
  10.      string tmp = childlist.get(i).get(j).getvalue(); 
  11.      if (tmp.indexof(strin) >= 0) { 
  12.       list.add(new basicnamevaluepair(childlist.get(i).get(j) 
  13.         .getname(), tmp)); 
  14.      } 
  15.     } 
  16.    } 
  17.   } 
  18.   public int getcount() { 
  19.    return list.size(); 
  20.   } 
  21.   public object getitem(int position) { 
  22.    return position; 
  23.   } 
  24.   public long getitemid(int position) { 
  25.    return position; 
  26.   } 
  27.   public view getview(final int position, view convertview, 
  28.     viewgroup parent) { 
  29.    convertview = minflater.inflate(r.layout.child, null); 
  30.    textview title = (textview) convertview.findviewbyid(r.id.child); 
  31.    title.settext(list.get(position).getvalue()); 
  32.    return convertview; 
  33.   } 
  34.  } 

初始化列表,默认为隐藏

  1. list = (listview) findviewbyid(r.id.listfind); 
  2. list.setvisibility(view.gone); 

(3)定义二级列表适配器

  1. protected class exadapter extends baseexpandablelistadapter { 
  2.   @override 
  3.   public int getgroupcount() { 
  4.    return fatherlist.size(); 
  5.   } 
  6.   @override 
  7.   public int getchildrencount(int groupposition) { 
  8.    return childlist.get(groupposition).size(); 
  9.   } 
  10.   @override 
  11.   public object getgroup(int groupposition) { 
  12.    return fatherlist.get(groupposition).getvalue(); 
  13.   } 
  14.   @override 
  15.   public object getchild(int groupposition, int childposition) { 
  16.    return childlist.get(groupposition).get(childposition).getvalue(); 
  17.   } 
  18.   @override 
  19.   public long getgroupid(int groupposition) { 
  20.    return groupposition; 
  21.   } 
  22.   @override 
  23.   public long getchildid(int groupposition, int childposition) { 
  24.    return childposition; 
  25.   } 
  26.   @override 
  27.   public view getgroupview(int groupposition, boolean isexpanded, 
  28.     view convertview, viewgroup parent) { 
  29.    view view = convertview; 
  30.    if (view == null) { 
  31.     layoutinflater inflater = (layoutinflater) getsystemservice(context.layout_inflater_service); 
  32.     view = inflater.inflate(r.layout.group, null); 
  33.    } 
  34.    textview t = (textview) view.findviewbyid(r.id.group); 
  35.    t.settext(fatherlist.get(groupposition).getvalue()); 
  36.    //展开,改变图片 
  37.    imageview gimg = (imageview) view.findviewbyid(r.id.tubiao); 
  38.    if (isexpanded) 
  39.     gimg.setbackgroundresource(r.drawable.mm_submenu_down_normal); 
  40.    else 
  41.     gimg.setbackgroundresource(r.drawable.mm_submenu_normal); 
  42.    return view; 
  43.   } 
  44.   @override 
  45.   public view getchildview(int groupposition, int childposition, 
  46.     boolean islastchild, view convertview, viewgroup parent) { 
  47.    view view = convertview; 
  48.    if (view == null) { 
  49.     layoutinflater inflater = (layoutinflater) getsystemservice(context.layout_inflater_service); 
  50.     view = inflater.inflate(r.layout.child, null); 
  51.    } 
  52.    textview t = (textview) view.findviewbyid(r.id.child); 
  53.    t.settext(childlist.get(groupposition).get(childposition) 
  54.      .getvalue()); 
  55.    return view; 
  56.   } 
  57.   @override 
  58.   public boolean hasstableids() { 
  59.    return true
  60.   } 
  61.   @override 
  62.   public boolean ischildselectable(int groupposition, int childposition) { 
  63.    return true
  64.   } 

初始化二级菜单

  1. exlist = (expandablelistview) findviewbyid(r.id.exlist); 
  2. exlist.setadapter(new exadapter()); 
  3. exlist.setgroupindicator(null); 
  4. exlist.setdivider(null); 

(4)搜索事件,输入改变即触发

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)去除焦点自动弹出输入

?
1
2
getwindow().setsoftinputmode(
windowmanager.layoutparams.soft_input_state_always_hidden);

希望本文所述对大家android程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9602022-03-02
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810052021-05-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8342021-03-31
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7452021-03-11
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4672021-01-03
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6192021-03-27
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4642021-03-09
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28