14

私の主な活動コード:

// here you put all your data.
String[] dataArray = { "Amit sharma Kumar", "Hisham Kumar Munner",
        "Vineet John Chaturvedi", "Lucky Kumar Verma" };

ArrayList<String> alAutoCompleteList;
AutoCompleteTextView acTV;
ArrayAdapter<String> adapter1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // etAuto = (EditText) findViewById(R.id.etAuto);
    acTV = (AutoCompleteTextView) findViewById(R.id.acTV);
    // Arraylist
    alAutoCompleteList = new ArrayList<String>();
    adapter1 = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_dropdown_item_1line,     alAutoCompleteList);


    acTV.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            if (acTV.enoughToFilter()) {
                acTV.showDropDown();
                acTV.bringToFront();
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
            alAutoCompleteList.clear();
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

            String acText = acTV.getText().toString().trim();

            for (String item : dataArray) {

                if     (item.toLowerCase().contains(acText.toLowerCase())) {
                    alAutoCompleteList.add(item);
                }
            }


            acTV.setThreshold(4);
            acTV.setAdapter(adapter1);
            acTV.showDropDown();

        }
    });

「シャルマ」を検索してスペースを押すと、提案が消えます。私はそれらの提案をそこにとどめてほしい。私はすべてをやろうとしましたが、成功しませんでした。誰か助けてもらえますか?

編集:誰かが彼らのエミュレーターでこのコードを試してみてください?AutoCompleteTextViewxmlにを追加して実行するだけです。

4

4 に答える 4

15

TextWatcherまず、そのリスナーを?に設定する理由はありますAutoCompleteTextViewか?データを自分でフィルタリングするためにこれを行った場合は、それを行うべきではありません(ウィジェットがデフォルトでこれを行い、コードが正しくないため)。

「シャルマ」を検索して、その後スペースを押すと。提案は消えます。私はそれらの提案をそこにとどめてほしい。

これは、アダプターとFilterそれに付属するデフォルトの実装AutoCompleteTextView、ドロップダウンリストに表示される値を提供するために内部で使用される要素が原因で発生します。のデフォルトの動作は表示されているものです。この回答ArrayAdapterで説明を見つけることができます。解決策は、アダプタの行データ全体でフィルタ文字列を検索するフィルタを使用して、独自のアダプタを実装することです。SDKからクラスのコードを取得し、単語の後にスペースを挿入するときにフィルタリングが壊れないように少し調整しました。コードが投稿するには大きすぎるので、ここでクラスを見つけることができます。プロジェクト内のクラスをコピーして、通常どおりに使用します。ArrayAdapterArrayAdapter

FilterWithSpaceAdapter<String> adapter1;
//... 
adapter1 = new FilterWithSpaceAdapter<String>(MainActivity.this,
            android.R.layout.simple_dropdown_item_1line, dataArray);
于 2012-10-25T10:12:51.370 に答える
2

Textwatcherは必要ありません。AutoCompleteTextViewは、設定したアダプターのフィルターを使用します。デフォルトのアダプタは、エントリに対してtoString()を呼び出すことによってエントリをフィルタリングします。当然、ユーザーがスペースを入力すると、値は一致しなくなります。このカスタム動作を実装するには、テキストウォッチャーを追加するのではなく、カスタムアダプターを作成する必要があります。ArrayAdapterまたはSimpleAdapterを引き続き拡張できます。getFilter()とpublishResults()を上書きすることにより、カスタムフィルタリング動作(この場合はtrim()呼び出し)を実装します。ここまたはここで、その方法の例を見つけることができます。

于 2012-10-29T19:28:58.053 に答える
2

まず第一に、テキストを監視する独自の方法があるため、 TextWatcherwithは必要ありません。あなたは使用する必要があります:AutoCompleteTextViewAutoCompleteTextViewMyWatcher

setThreshold(3);
final String[] AndroidDesk= getResources().getStringArray(R.array.clothname_arrays);
ArrayAdapter<String> My_arr_adapter= new ArrayAdapter<String>(getApplicationContext(),
            android.R.layout.simple_dropdown_item_1line,AndroidDesk);      
   cloths.setThreshold(1);
   cloths.setAdapter(My_arr_adapter);
   cloths.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {                               
   }
   });
于 2013-04-22T13:00:56.777 に答える
0

オートコンプリートテキストビューは、オートリスナーイベントのためにテキストウォッチャーを必要としなかったため、テキストウォッチャーに問題があると思います。リストではなく、単純に配列をアダプタに渡す必要があります。alAutoCompleteListtherはリストに値がありません。リストに価値を追加したことはありません。

  • 次のようにする必要があります:alAutoCompleteList.add( "data one"); alAutoCompleteList.add( "data two");

  • または、dataArrayをアダプタに渡します。adapter1 = new ArrayAdapter(MainActivity.this、android.R.layout.simple_dropdown_item_1line、dataArray);

  • テキストウォッチャーを使用する必要はありません。

于 2012-10-25T10:27:03.453 に答える