
注意:在第一次按键时,结果将被填充.之后,如果我清除输入的文本并输入不同的字符,结果将不会显示在自动完成下拉框中.我在每次按键时从其他应用程序获取,但没有填充在自动完成下拉框中.
我尝试使用textVIEw.showDropDown();和adapter.setNotifyOnChange(true);选项.但没用.
package com.util;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStream;import java.io.inputStreamReader;import java.util.ArrayList;import java.util.List;import org.apache.http.httpentity;import org.apache.http.httpResponse;import org.apache.http.Statusline;import org.apache.http.clIEnt.ClIEntProtocolException;import org.apache.http.clIEnt.httpClIEnt;import org.apache.http.clIEnt.methods.httpGet;import org.apache.http.impl.clIEnt.DefaulthttpClIEnt;import org.Json.JsONArray;import org.Json.JsONObject;import androID.app.Activity;import androID.os.Bundle;import androID.text.Editable;import androID.text.TextWatcher;import androID.util.Log;import androID.Widget.ArrayAdapter;import androID.Widget.autoCompleteTextVIEw;public class HelloautoCompleteActivity extends Activity {List countrIEs = new ArrayList(); String url = ""; //some application urlautoCompleteTextVIEw textVIEw;ArrayAdapter<String> adapter;@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); textVIEw = (autoCompleteTextVIEw) findVIEwByID(R.ID.autocomplete_country); textVIEw.addTextChangedListener(new CostomTextWatcher()); textVIEw.setThreshold(1); adapter = new ArrayAdapter<String>(this,R.layout.List_item,countrIEs); textVIEw.setAdapter(adapter);}private class CostomTextWatcher implements TextWatcher { @OverrIDe public voID afterTextChanged(Editable s) { } @OverrIDe public voID beforeTextChanged(CharSequence s,int start,int count,int after) { } @OverrIDe public voID onTextChanged(CharSequence s,int before,int count) { if (s.length() > 0) { countrIEs.clear(); String readTwitterFeed = readFeed(s.toString()); System.out.println(readTwitterFeed); try { JsONObject menuObject = new JsONObject(readTwitterFeed); JsONArray menuitemArray = menuObject .getJsONArray("objectnameList"); for (int i = 0; i < menuitemArray.length(); i++) { System.out.println(menuitemArray.get(i)); countrIEs.add(menuitemArray.get(i).toString()); } // adapter.notifyDataSetChanged(); // adapter.setNotifyOnChange(true); // textVIEw.setAdapter(adapter); // textVIEw.setThreshold(1); // textVIEw.setAdapter(adapter); // textVIEw.showDropDown(); // adapter.setNotifyOnChange(true); } catch (Exception e) { e.printstacktrace(); } } }}public String readFeed(String val) { StringBuilder builder = new StringBuilder(); httpClIEnt clIEnt = new DefaulthttpClIEnt(); httpGet httpGet = new httpGet( url); try { httpResponse response = clIEnt.execute(httpGet); Statusline statusline = response.getStatusline(); int statusCode = statusline.getStatusCode(); if (statusCode == 200) { System.out.println("200"); httpentity entity = response.getEntity(); inputStream content = entity.getContent(); BufferedReader reader = new BufferedReader( new inputStreamReader(content)); String line; while ((line = reader.readline()) != null) { builder.append(line); } } else { System.out.println("else block"); Log.e(HelloautoCompleteActivity.class.toString(),"Failed to download file"); } } catch (ClIEntProtocolException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } return builder.toString();} }
解决方法 您也可以使用Filter接口来实现此功能.事实证明,Filter.performFiltering()仅在此类目的的情况下从UI线程调用.以下是我用来执行此 *** 作的一些代码:Filter filter = new Filter() { @OverrIDe public CharSequence convertResultToString(Object resultValue) { return resultValue.toString(); } @OverrIDe protected FilterResults performFiltering(CharSequence charSequence) { if( charSequence == null ) return null; try { // This call hits the server with the name I'm looking for and parses the JsON returned for the first 25 results PagedResult results = searchByname( charSequence.toString(),1,25,true); FilterResults filterResults = new FilterResults(); filterResults.values = results.getResults(); filterResults.count = results.getResults().size(); return filterResults; } catch (JsONException e) { return new FilterResults(); } } @OverrIDe protected voID publishResults(CharSequence charSequence,FilterResults filterResults) { if( filterResults != null ) { adapter.clear(); adapter.addAll( (List<MyObject>)filterResults.values ); } }}; 然后使用Filter:
private autoCompleteTextVIEw beveragename; ... beveragename = findVIEwByID( R.ID.beveragename ); listadapter adapter = ... adapter.setFilter(filter); beveragename.setAdapter(adapter);
或者你也可以使用这个链接
http://www.grobmeIEr.de/androID-autocomplete-with-Json-data-served-by-struts-2-05122011.HTML总结
以上是内存溢出为你收集整理的android中的自动完成功能无法使用动态数据全部内容,希望文章能够帮你解决android中的自动完成功能无法使用动态数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)