我正在加载手机联系人列表并在edittext上实现TextChangedListener,如下所示
editTxt.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
final TextView noDataFound = (TextView) findViewById(R.id.norecords);
inputName = s.toString();
if(inputName!=null&&!inputName.trim().equals("")){
Log.d(TAG, "LoadMoreEntries --> Constants.loadEntries : "
+ Constants.loadEntries);
if (Constants.loadEntries != null) {
Constants.loadEntries.cancel(true);
}
Constants.loadEntries = new LoadEntries();
Constants.loadEntries.execute();
}
Button closesearch = (Button) findViewById(R.id.closesearch);
if (inputName != null && !inputName.trim().equals("")) {
closesearch.setVisibility(View.VISIBLE);
} else {
closesearch.setVisibility(View.GONE);
}
closesearch.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (Constants.loadEntries != null) {
Constants.loadEntries.cancel(true);
Constants.loadEntries = new LoadEntries();
Constants.loadEntries.execute();
}else {
}
return false;
}
});
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
这里当用户键入正确的名称时,它会给出名称,当他输入错误的名称时,它不会显示任何数据。 我的问题是当我输入正确的名称和删除时,整个列表被加载,但当我输入错误的名称和显示 没有数据,当删除名称时,列表没有更新。输入名称并单击后,我也有“x”按钮 应该把我所有的清单都拿回来。任何帮助表示赞赏
答案 0 :(得分:1)
使用Google Places AutoComplete API而不是实现Textwatcher。当您开始输入并暂停时,Google商家信息自动完成API非常有效,然后它会显示每个字符的下拉列表和下拉列表。
使用此功能,您可以轻松更新自动填充的下拉列表。
这是对此的解释。
editTxt.setAdapter(new PlacesAutoCompleteAdapter(this,R.layout.yourlayout));
这里是PlacesAutoCompleteAdapter类,它是过滤结果并返回过滤结果。
private class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> resultList;
private String[] myArray;
public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public int getCount() {
return myArray.length;
}
@Override
public String getItem(int index) {
return myArray[index];
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
myArray = autocomplete(constraint.toString()); // here we are calling myAutocomplete method.
// Assign the data to the FilterResults
filterResults.values = myArray;
filterResults.count = myArray.length;
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
}
private String[] autocomplete(String dropdownString) {
ArrayList<String> resultList = null;
StringBuilder jsonResults = new StringBuilder();
String term;
try {
term=URLEncoder.encode(dropdownString, "utf8");
} catch (Exception e) {
e.printStackTrace();
term = dropdownString;
}
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE);
sb.append("?param="+param1+"); // this is parameter if your getting data from server.
sb.append("&term="+term); // this term which you typing in edittext.
String url = sb.toString();
// you can do here anything with your list. get it and populate it.
return myArray;
}
PLACES_API_BASE: - here is url if you are getting data from Web(in my example www.myurl/myapp)
。
TYPE_AUTOCOMPLETE: - file name or exact location from where are you getting data(in my example abc.php)
。
如果您有任何疑问请问我。不要犹豫。