国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程實現二級下拉菜單及快速搜索的方法

2020-04-11 11:18:19
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上林县| 奉节县| 青海省| 漳平市| 乌兰察布市| 天等县| 兴安盟| 正阳县| 格尔木市| 东阿县| 安国市| 汝州市| 珠海市| 崇左市| 内黄县| 壶关县| 溆浦县| 武义县| 黔西| 罗定市| 外汇| 苏州市| 鸡泽县| 开封市| 成武县| 汤原县| 澄迈县| 浦北县| 齐齐哈尔市| 普兰县| 平利县| 武川县| 天峻县| 牟定县| 江华| 班戈县| 三台县| 岗巴县| 绥中县| 鹤庆县| 镇巴县|