2013/08/13

AutoCompleteTextView をタップした瞬間に候補を表示させる方法

Android で入力候補を表示させる場合、一般的に AutoCompleteTextView を使用すると思います。

AutoCompleteTextView には setThreshold というメソッドがあり、何文字入力した時点から候補を表示するか指定することが出来ます。
しかし、このメソッド、0以下を指定できません。
つまり、最低でも1文字入力しないと候補が出て来ないのです。

多分、大量の候補があった場合に、全部表示してしまうとパフォーマンスが低下するからなのでしょう。
しかし、候補が少ない場合はフォーカスが移った瞬間に候補を表示してあげた方が親切な場合もあります。

そんな場合は、以下のようにしてやれば、フォーカスが移った瞬間に候補を表示させることができます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
AutoCompleteTextView mAutoCompleteTextView;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
 
    String[] list = new String[] {
            "alpha",
            "bravo",
            "charlie",
            "delta",
            "echo"
    };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.select_dialog_item, list);
    mAutoCompleteTextView.setAdapter(adapter);
    mAutoCompleteTextView.setThreshold(1);
 
    mAutoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                mAutoCompleteTextView.showDropDown();
            }
        }
    });
}

onFocusChangeListener で、フォーカスが移ったことを検知し、その際に強制的に showDropDown で候補を表示させるわけです。
アプリの作りによっては、他のイベントをトリガにした方が良い場合もあるかもしれません。

0 件のコメント: