广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-05-07 10:25:04 次阅读 稿源:互联网
    广告

    本文实例讲述了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程序设计有所帮助。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告