Android:带有TextChangedListener问题的edittext

时间:2013-03-05 07:15:35

标签: android android-edittext textchanged

我正在加载手机联系人列表并在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”按钮 应该把我所有的清单都拿回来。任何帮助表示赞赏

1 个答案:

答案 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)
如果您有任何疑问请问我。不要犹豫。