搜索城市

小组成员: 黄汉煜、潘启慧、朱思敏、杨晓、潘伊男   最终完成日期:15年11月29日

一、简介

本模块主要完成了两个功能: 1、通过输入拼音或汉字查找城市 2、通过侧栏的首字母A-Z(类似通讯录侧栏检索)快速检索省市

二、基础知识

  • 知识点1:

    通过监听EditText更改事件获取搜索参数并查询数据库返回结果
    
  • 知识点2:

      自定义View、监听ontouch事件来实现按首字母查询的功能
    

三、主要思路及步骤

3.1 主要思路

功能1: 在用户点击搜索框并输入城市拼音或汉字时触发onTextChanged事件,获取这个EditText参数,从数据库中读取对应城市并展示

功能2:自定义侧栏SideBar (extends View),注册ontouch事件,在点击侧栏时获取被点击的字母并遍历城市列表,查找首字母对应的province并定位,这个城市列表是要根据province的拼音首字母为首,city的拼音首字母为辅升序排序的。

3.2 实践步骤

**功能1:通过输入拼音或汉字查找城市**
   ** 1.1**添加控件:
<EditText
    android:id="@+id/search_edit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="搜索全国城市(中⽂文)"
    android:layout_margin="10.0dip"
    android:drawableLeft=
        "@drawable/magnifying_glass"
    android:drawablePadding="8.0dip"
    android:paddingBottom="8.0dip"
    android:paddingLeft="10.0dip"
    android:paddingRight="30.0dip"
    android:paddingTop="8.0dip"
    android:singleLine="true"
    android:background
        ="@drawable/contact_search_box_edittext_keyword_background"
android:textColor="#ff000000"
android:textColorHint="#ffcccccc"
android:textSize="15.0sp"
/>
    **1.2**注册函数响应ontextchange事件:
edit_search.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {//根据输入模糊查询
        mCityList=((MyApplication) MyApplication.getInstance()).getmCityDB().getAllCity(s.toString());  //查询获取当前条件下的城市
        dispalyList(); //展示结果
    }

});

**功能2:通过侧栏的首字母A-Z(类似通讯录侧栏检索)快速检索省市**

2.1: 自定义侧栏视图SideBar
public class SideBar extends View implements OnTouchListener 
**2.2**:通过ondraw函数在视图对应位置上填上字母
letters = toList(new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z', '#' });
2.3: 注册ontouch事件,获取点击位置的字母(获取方式不再详述),定位到对应首字母的province
    char sindex = letters.get(currentItem) ;
    for (int i = 0 ; i < adapter.getCount() ;i ++) {
            City c = adapter.getItem(i) ;
            if (c.getProvincepy()!=null && c.getProvincepy().length() >0 &&c.getProvincepy().charAt(0)==sindex ){
                listView.setSelection(i);
                break ;
            }
    }

四、常见问题及注意事项 功能1效果图 : 功能2效果图(详看右侧栏A-Z):

results matching ""

    No results matching ""