1

Androidのオートコンプリートテキストビューに永続的な検索結果を追加したい。例:オートコンプリートに「x」と入力し、ホテルのリストが表示されている場合... xyz1、xyz2.etc ...その後、最後の結果は「NOTINLIST」の値である必要があります。ユーザーがホテルを見つけられない場合は、[リストにない]オプションを選択できます。

ユーザーが予測検索で表示できなかったテキストを入力した場合でも、オートコンプリートが表示する必要があるのは「リストにない」だけです。私はAndroidを初めて使用します。小さなアプリを実行しています。Plzヘルプ。カスタムオートコンプリートテキストビューを使用する必要がある場合、どのメソッドをオーバーライドする必要がありますか?もしそうなら、私がオーバーライドしなければならないメソッドコードを教えてください

4

2 に答える 2

1

AutoCompleteAdapterこれが私のアプリの1つで使用したiです。これで問題が解決することを願っています

アダプターを下からAutoCompleteTextViewコントロールに設定します。

    ArrayAdapter<String> adapter = new AutoCompleteAdapter(this,
            R.layout.dropdown_item);

    autoComplete.setAdapter(adapter);

サンプルアダプター:

private class AutoCompleteAdapter extends ArrayAdapter<String>
        implements Filterable {
    private ArrayList<String> mData;

    public AutoCompleteAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        mData = new ArrayList<String>();
    }

    @Override
    public int getCount() {
        try {
            return mData.size();
        } catch (NullPointerException e) {
            return 0;
        }
    }

    @Override
    public String getItem(int index) {
        return mData.get(index);
    }

    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    //This shows a progress to the user in my app. you don't need to use this
                    handle.sendEmptyMessage(MSG_SHOW_PROGRESS);
                    try {
                        //Fill mData with your data
                        mData = XmlParser.searchLocations(constraint
                                .toString());
                    } catch (Exception e) {
                        handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                    }
                    mData.add("NOT IN LIST");
                    filterResults.values = mData;
                    filterResults.count = mData.size();
                }
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence contraint,
                    FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                    handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                } else {
                    notifyDataSetInvalidated();
                    handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                }
            }
        };
        return myFilter;
    }
}
于 2012-12-06T15:59:31.897 に答える
0
if (constraint != null) {

    try {
        for(int i=0;i<temp.size();i++)
        {
        if(temp.get(i).toString().startsWith(constraint.toString().toUpperCase()))
        {

        mData.add(temp.get(i).toString());  

        }
        }


        mData.add("SEARCH NOT THERE");

    } catch (Exception e) {

    }


         filterResults.values = mData;
         filterResults.count = mData.size();




}
return filterResults;

フィルタリングを実行しました...それでも、入力した結果ではなく、すべての結果が表示されます... :(

于 2012-12-23T14:13:30.227 に答える