您的位置:首页 > 移动开发 > Android开发

AutoCompleteTextView使用探索

2013-04-10 10:01 393 查看
为了实现和google一样的关键字搜索,我选择使用AutoCompleteTextView这个组件,使用过程历经坎坷,最后完成。

一、需要

        我做的应用是在输入框输入关键字,然后连接服务器,在服务器端根据关键字查询,得到一个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);
}


这应该是显示下拉菜单的,所以我就加入了上边红色的部分,强制显示下拉框,问题才得到解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息