AutoCompleteTextView按照关键字从服务器上获得数据显示下拉列表
来源:互联网 发布:编程人生 pdf 编辑:程序博客网 时间:2024/06/06 14:16
最近项目原因,需要做出一个类似baidu搜索时下拉框的效果如图
于是乎想了多种办法,一种是利用AutoCompleteTextView+ListView方式,但是这种方式有一个缺点就是需要用帧布局,同时在利用AutoCompleteTextView.addTextChangedListener方法控制ListView的显示和消失时遇到一个很大的问题就是无法让其消失,即使你选中了一个条目,因为TextChanged的原因,ListView也是以一条你选中的条目为显示内容的形式在AutoCompleteTextView的下方,没有找到好的解决办法。
之所以想到以上这种办法的原因是在项目的一开始没有使用AutoCompleteTextView的原生态的下拉列表(有各种各样的不更新造成的),后来在使用AutoCompleteTextView+ListView无效的情况下只能回到AutoCompleteTextView的原生态的下拉列表的方法上。
http://stackoverflow.com/tags/autocompletetextview/hot这是stackoverflow上关于AutoCompleteTextView的FAQ,从中我们可以看到有多个关于从网上获取条目然后显示在AutoCompleteTextView的列表之上的问题和相应的回答。最终选中了http://stackoverflow.com/questions/8653260/autocomplete-in-android-not-working-with-dynamic-data这个问题当中名为iNan的解答,并对其进行了改进。
具体代码如下
WikiSuggestActivity
import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;import org.json.JSONArray;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;/** * @Title: WikiSuggestActivity.java * @Package com.yang.testautocompletetextview * @Description: 参考http://stackoverflow.com/questions/8653260/autocomplete-in-android-not-working-with-dynamic-data * @author Yang * @date 2012-8-12 下午2:59:54 * @version V1.0 */public class WikiSuggestActivity extends Activity {public String data; public List<String> suggest; public AutoCompleteTextView autoComplete; public ArrayAdapter<String> aAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); suggest = new ArrayList<String>(); autoComplete = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); autoComplete.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable editable) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { String newText = s.toString(); new getJson().execute(newText); } }); } class getJson extends AsyncTask<String,String,String>{ @Overrideprotected void onPostExecute(String result) {super.onPostExecute(result); aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,suggest); autoComplete.setAdapter(aAdapter); aAdapter.notifyDataSetChanged();}@Override protected String doInBackground(String... key) { String newText = key[0]; newText = newText.trim(); newText = newText.replace(" ", "+"); try{ HttpClient hClient = new DefaultHttpClient(); HttpGet hGet = new HttpGet("http://en.wikipedia.org/w/api.php?action=opensearch&search="+newText+"&limit=8&namespace=0&format=json"); ResponseHandler<String> rHandler = new BasicResponseHandler(); data = hClient.execute(hGet,rHandler); suggest = new ArrayList<String>(); JSONArray jArray = new JSONArray(data); for(int i=0;i<jArray.getJSONArray(1).length();i++){ String SuggestKey = jArray.getJSONArray(1).getString(i); suggest.add(SuggestKey); } }catch(Exception e){ Log.w("Error", e.getMessage()); } return null; } }}activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:ems="10" /> <!-- android:ems 设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度 --></RelativeLayout>item.xml
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/online_user_list_item_textview" ></TextView>效果图如下:
整个项目代码下载地址
- AutoCompleteTextView按照关键字从服务器上获得数据显示下拉列表
- android控件之AutoCompleteTextView下拉列表显示一片空白
- android控件之AutoCompleteTextView下拉列表显示一片空白
- datagrideview下拉列表显示数据
- AutoCompleteTextView下拉列表字体颜色
- 关于AutoCompleteTextView的下拉列表
- android自定义Spinner下拉菜单和AutoCompleteTextView自动显示的(下拉列表框)样式
- android自定义Spinner下拉菜单和AutoCompleteTextView自动显示的(下拉列表框)样式
- Ext.js5(自定义的下拉列表模板)(从服务器加载数据)(28)
- 去除下拉列表中不想显示的从数据库取出的数据
- 从数据库里查询数据,显示在jsp的下拉列表框里
- C# AJAX点击文本框,从后台获取数据显示下拉列表(带有皮肤)
- 如何获得下拉数据集下拉框的显示值
- 下拉列表显示数据库对应数据
- DataGridView根据下拉列表显示数据
- 从授时服务器上获得时间
- 从服务器上获得html和图片
- 从授时服务器上获得时间
- Java内部类的学习总结
- 如何掌握程序语言
- play framework 1,2的debug方法对比
- svn东西下来,远程自动scp脚本ubuntu
- Android架构: MVC 模式加载数据 前台显示
- AutoCompleteTextView按照关键字从服务器上获得数据显示下拉列表
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
- Java中的System.currentTimeMills
- spring1 selfApplicationContext used
- AR增强现实
- Android应用程序与SurfaceFlinger服务的连接过程分析
- wParam和lParam在不同时期的不同作用
- C/C++面试之算法系列--菲波拉契数列的递归与非递归算法
- XMl Publisher Reports Fail with java.io.FileNotFoundException on Temp Directory After Cloning