7

CancelOKボタンを含むDialogFragmentがあります。AutoCompleteTextViewは推奨されたオプションのみを許可します

AutoCompleteTextViewは、私がサーバーから取得しているユーザー名の候補を示しています。

私がしたいのは、ユーザーが既存のユーザー名だけを入力できるように制限することです。

ユーザーがOKをクリックしたときにそのユーザー名が存在するかどうかを確認できますが、別の方法があります。そのようなユーザー名が存在しない場合、ユーザーが文字を入力できないとしましょう。私はこれを行う方法がわかりません。なぜなら、入力されたキャラクタごとに最大5件の提案しか得られないからです。サーバーはそのように実装されています。

どのような提案も歓迎されます。 は、私は、これをより適切な解決策を見つけることができなかったあなたに

+0

利用スピナー代わりに...そこにユーザ名のLOTがあり、クライアントはオートコンプリートのTextViewを持って望んでいるので、私はスピナーを使用することはできません@Selvin – Selvin

+1

。 – nikmin

+0

検索オプション付きのリストビューはどうですか? –

答えて

10

ありがとう:

私はこのフォーカス変更リスナー

actName.setOnFocusChangeListener(new OnFocusChangeListener() { 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       ArrayList<String> results = 
         ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 
       if (results.size() == 0 || 
         results.indexOf(actName.getText().toString()) == -1) { 
        actName.setError("Invalid username."); 
       }; 
      } 
     } 
}); 

提案を含むArrayListを返すgetAllItems()方法を追加しました。

だから私はいくつかのユーザー名を入力したときに、その後、別のフィールドに移動し、このリスナーがトリガーと提案リストが空でない場合は入力したユーザー名がそのリストにあるかどうかはチェックされています。条件が満たされない場合、エラーが表示されます。

また、私はOKボタンのクリックで同じチェックを持っている:AutoCompleteビューはまだフォーカスされている場合

private boolean checkErrors() { 

    ArrayList<String> usernameResults = 
      ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 

    if (actName.getText().toString().isEmpty()) { 
     actName.setError("Please enter a username."); 
     return true; 
    } else if (usernameResults.size() == 0 || usernameResults.indexOf(actName.getText().toString()) == -1) { 
     actName.setError("Invalid username."); 
     return true; 
    } 

    return false; 
} 

ので、エラーチェックが再度行われます。

+0

'UsersAutoCompleteAdapter'とは何ですか? –

+0

@Wizardそれは私がAutocompleteTextViewのために使用する私のカスタムListAdapterです。これはアダプタの名前です。 – nikmin

+0

okありがとう... –

関連する問題