AutoCompleteTextView使用探索
2013-04-10 10:01
393 查看
为了实现和google一样的关键字搜索,我选择使用AutoCompleteTextView这个组件,使用过程历经坎坷,最后完成。
一、需要
我做的应用是在输入框输入关键字,然后连接服务器,在服务器端根据关键字查询,得到一个xml文件,然后我得到进行解析!
二、主要代码
这段是添加监听,在onTextChanged中使用异步工具,连接网络,获得数据,然后解析
这里获得一个对象,对象中存储一个list保存所有学校信息
三、问题
1、总是从输入第二个字符开始出现下拉列表,后来才发现自己犯了一个低级错误,因为AutoCompleteTextView默认是从输入第二个字符开始自动匹配的,可以在xml使用 android:completionThreshold="1" 这个属性,或者动态设置 act_input_school.setThreshold(1) 。
2、第二个问题,就是第一次输入的时候,不管你输入几个字符,都不会出现下拉框,尽管我已经设置了从第一个字符开始匹配,但是还是不行,因为我检查过,网络确实获得了数据,已经设置进入adapter中,可是就是显示不出来,这里只限第一次输入,如果第一次输入“北”,应该把带有这个关键字的所有大学都显示出来,可是不成,我Toast了一下,发现adapter中有63条数据,很显然没显示出来,然后输入“京”,这时候变成“北京”,会出现下拉框,如果把北京删掉,从新输入“北”,会出现下拉框,我去,这不是玩我嘛!!后来我看了下源码,如下
这应该是显示下拉菜单的,所以我就加入了上边红色的部分,强制显示下拉框,问题才得到解决
一、需要
我做的应用是在输入框输入关键字,然后连接服务器,在服务器端根据关键字查询,得到一个xml文件,然后我得到进行解析!
二、主要代码
act_input_school.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO 自动生成的方法存根 new GetPromptInfoTask().execute(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO 自动生成的方法存根 } @Override public void afterTextChanged(Editable s) { // TODO 自动生成的方法存根 } });
这段是添加监听,在onTextChanged中使用异步工具,连接网络,获得数据,然后解析
@Override protected QueryResult<SchoolInfo> doInBackground(Void... params) { // TODO 自动生成的方法存根 HashMap<String, String> pairs = new HashMap<String, String>(); pairs.put(SoufunConstants.MWSSAGE_NAME,"xuexiao"); pairs.put("xuexiao", act_input_school.getText().toString()); try { return HttpApi.getQueryResultByPullXml(pairs, "school", SchoolInfo.class); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return null; }
这里获得一个对象,对象中存储一个list保存所有学校信息
protected void onPostExecute(QueryResult<SchoolInfo> result) { // TODO 自动生成的方法存根 ArrayAdapter<String> promtAdapter = null; if (result !=null){ schoolList = result.getList(); if(schoolList!=null&&schoolList.size()>0){ promtAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_dropdown_item_1line); for(SchoolInfo tempSchoolInfo:schoolList){ promtAdapter.add(tempSchoolInfo.name); } } act_input_school.setAdapter(promtAdapter); //下边这两行应该是红色的可是显示不出来 if(act_input_school.getText().toString().length()>0) act_input_school.showDropDown(); }else{ } if(promtAdapter != null) Toast.makeText(mContext, "数据源中有"+promtAdapter.getCount()+"条数据~~~~~~~"+act_input_school.isPopupShowing(), 0).show(); }在onPostExecute中新建一个adapter,然后把数据存进去,红色的部分是关键,当输入框长度大于0的时候强行显示下拉列表。或许有人问我,这部是不是多余,对于AutoCompleteTextView来说会自动显示下拉列表框,不是这样的。下面说下我遇到的两个问题。
三、问题
1、总是从输入第二个字符开始出现下拉列表,后来才发现自己犯了一个低级错误,因为AutoCompleteTextView默认是从输入第二个字符开始自动匹配的,可以在xml使用 android:completionThreshold="1" 这个属性,或者动态设置 act_input_school.setThreshold(1) 。
2、第二个问题,就是第一次输入的时候,不管你输入几个字符,都不会出现下拉框,尽管我已经设置了从第一个字符开始匹配,但是还是不行,因为我检查过,网络确实获得了数据,已经设置进入adapter中,可是就是显示不出来,这里只限第一次输入,如果第一次输入“北”,应该把带有这个关键字的所有大学都显示出来,可是不成,我Toast了一下,发现adapter中有63条数据,很显然没显示出来,然后输入“京”,这时候变成“北京”,会出现下拉框,如果把北京删掉,从新输入“北”,会出现下拉框,我去,这不是玩我嘛!!后来我看了下源码,如下
public void showDropDown() { buildImeCompletions(); if (mPopup.getAnchorView() == null) { if (mDropDownAnchorId != View.NO_ID) { mPopup.setAnchorView(getRootView().findViewById(mDropDownAnchorId)); } else { mPopup.setAnchorView(this); } } if (!isPopupShowing()) { // Make sure the list does not obscure the IME when shown for the first time. mPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED); mPopup.setListItemExpandMax(EXPAND_MAX); } mPopup.show(); mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS); }
这应该是显示下拉菜单的,所以我就加入了上边红色的部分,强制显示下拉框,问题才得到解决
相关文章推荐
- AutoCompleteteTextView的使用方法
- AutoCompleteTextView使用中的注意事项
- AutoCompleteTextView控件的使用
- AutoCompleteTextView的使用
- AutoCompleteTextView的使用
- AutoCompleteTextView 自动提示功能使用详解
- AutoCompleteTextView的使用
- AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字,Filterable的使用)
- AutoCompleteTextView的使用
- android spinner autocompleteTextView 组件使用
- AutoCompleteTextView的使用
- autocompletetextview使用
- Android AutoCompleteTextView 的使用
- AutoCompleteTextView搜索记录栏的使用
- AutoCompleteTextView的使用
- AutoCompleteTextView控件的使用
- AutoCompleteTextView使用
- Android中的AutoCompleteTextView与MultiAutoCompleteTextView的使用
- ANDROID笔记:AutoCompleteTextView的简单使用
- AutoCompleteTextView的使用