0

私は電話の連絡先をリストにロードし、以下のように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」ボタンをクリックすると、すべてのリストが元に戻ります。どんな助けでも大歓迎です

4

1 に答える 1

1

Textwatcherを実装するのではなく、Google PlacesAutoCompleteAPIを使用します。Google Places AutoComplete 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)
ご不明な点がございましたら、お問い合わせください。躊躇しないでください。

于 2013-03-05T07:45:11.200 に答える