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

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

一、我们要做什么?

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

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

二、界面设计

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

<?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)一级菜单栏样式,图片将区别是否展开

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout >
 <TextView
  android:id="@+id/group" >
 </TextView>
 <ImageView
  android:id="@+id/tubiao">
 </ImageView>
</LinearLayout>

(3)二级菜单栏样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout >
 <TextView
  android:id="@+id/child">
 </TextView>
</LinearLayout>

三、代码设计

(1) 定义菜单对应数据

public static List<BasicNameValuePair> fatherList = new ArrayList<BasicNameValuePair>();
public static List<List<BasicNameValuePair>> childList = new ArrayList<List<BasicNameValuePair>>();

生成测试数据

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)定义列表适配器

protected class ListAdapter extends BaseAdapter {
  private LayoutInflater mInflater;
  //查询结果列表
  private List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
  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
, 二级下拉菜单
快速搜索
excel二级下拉菜单、二级下拉菜单、html二级联动下拉菜单、html二级下拉菜单代码、css二级下拉菜单,以便于您获取更多的相关知识。

时间: 2024-11-08 20:18:55

Android编程实现二级下拉菜单及快速搜索的方法_Android的相关文章

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

本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法.分享给大家供大家参考,具体如下: 一.我们要做什么? 上面有个搜索框,下面是一个二级下拉菜单. 输入查询内容,下面列表将显示查询结果. 二.界面设计 (1)这是主框架(部分属性已经省去,请看源码),从上至下分别是文本框,列表,二级列表. <?xml version="1.0" encoding="utf-8"?> <LinearLayout> <LinearLayout

&amp;#106avascript+xml实现二级下拉菜单,不会被任何标签或元素遮住

xml|菜单|下拉 一.简单说明 该菜单最大的优点是可以跨过网页上任何标签,甚至是框架,(一般的菜单会被select,object,flash等挡住)所以如果你有这方面的需要,那么这个菜单是个很好的选择. 总体而言,它有如下特性:(1)菜单的样式和数据都是通过xml配置(2)菜单的样式可以随心所欲修改,如: <base>     <background-color>#DDDDDD</background-color>     <background-image&g

javascript+xml实现二级下拉菜单,不会被任何标签或元素遮住

一.简单说明 该菜单最大的优点是可以跨过网页上任何标签,甚至是框架,(一般的菜单会被select,object,flash等挡住)所以如果你有这方面的需要,那么这个菜单是个很好的选择. 总体而言,它有如下特性:(1)菜单的样式和数据都是通过xml配置(2)菜单的样式可以随心所欲修改,如: <base>     <background-color>#DDDDDD</background-color>     <background-image>url(menu

EXCEL制作二级下拉菜单的方法

EXCEL制作二级下拉菜单的方法         如图所示,在A2单元格输入财务部,B2姓名下拉菜单只显示财务部下方的员工,如果A2输入行政部,在B2单元格下拉菜单只显示行政部下方的员工姓名. 步骤1:首先选中我们需要生成二级菜单的数据区域,按住键盘上的"CTRL+G" 或者 "F5"键 ,在弹出的窗口中单击 "定位条件" 步骤2:定位条件中选择"常量" 常量是用来定位有效的数据,因为我们选择的区域中有很多无效数据,即空白单元

CSS技巧分享:如何用css制作横排二级下拉菜单

原文:CSS技巧分享:如何用css制作横排二级下拉菜单 导航菜单是每个网站所必备的功能,也是每个学习制作网站的朋友所必须接触的,如何用css样式制作一个简单漂亮的二级下拉菜单呢,下来小编就一步一步教大家来制作横排二级下拉菜单,让我共同来学习吧. 首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a href="#">栏目一</a&

前端的小玩意(5)——用dojo写的二级下拉菜单自动添加功能

先上DEMO, 虽然丑,那是因为零级按钮的界面太丑了,图标也丑┑( ̄Д  ̄)┍ 这两个优化后会好很多,毕竟美观不是我的特长嘛 DEMO链接: http://download.csdn.net/detail/qq20004604/9568685 (83)二级下拉菜单 ①过程描述: [1]数据来源:一个数组,具体格式为: var dataArr = [{text: "测试1", img: "test"}, {text: "测试2", img: &qu

基于jQuery实现二级下拉菜单效果_jquery

本文通过代码实例详细介绍一下简单的二级下拉菜单是如何实现的,当然还有更为复杂的二级菜单,不过先学会如何制作简单的,分享给大家供大家参考,具体内容如下 代码如下: <html> <head> <meta charset=" utf-8"> <title>下拉菜单</title> <style type="text/css"> nav a{ text-decoration:none; } nav&g

jQuery实现二级下拉菜单效果_jquery

大家都知道jQuery是一个框架,它对JS进行了封装,使其更方便使用.前面两篇博文分别是用CSS样式和JS实现的,那么这篇就用jQuery来实现二级下拉式菜单. 使用JQuery实现需要用到的知识有:        1)使用$(function(){...})获取到想要作用的HTML元素.        2)通过使用children()方法寻找子元素.        3)通过使用show()方法来显示HTML元素.        4)通过使用hide()方法来隐藏HTML元素.        5

jQuery实现简单二级下拉菜单_jquery

html代码 <div class="UpLayer"> <dl> <dt> <a href="javascript:void(0)"></a></dt> <dd> <a href="http://www.demo.com/js/">特效</a> <a href="http://www.demo.com/Tutorials/