0

AutoCompleteTextView を使用して、潜在的に長い候補アイテムのリストからアイテムを選択しようとしています。リストを正常に表示でき、ユーザーがオートコンプリート候補の 1 つを選択すると、onItemClick を呼び出すことができます。問題は、onItemClick で報告される「位置」が、フィルタされた項目のドロップダウン リスト内の位置であり、候補の元のリスト内の位置ではないことです。

ArrayAdapter に指定した元のリストで選択した項目のインデックスを知る必要があります。フィルター処理後のドロップダウン リスト内の位置ではありません。

AutoCompleteTextView をサブクラス化し、元のリスト インデックスを与えるはずの onCommitCompletion をオーバーライドしようとしましたが、アイテムが選択されたときに呼び出されません。

BaseAdapter のサブクラス化も試みたので、オートコンプリート リストのビューを自分で生成し、各項目のアプリケーション オブジェクトを使用して setTag を作成できましたが、AutoCompleteTextView は setAdapter の BaseAdapter サブクラスを受け入れません。

AutoCompleteTextView を完全に書き直さない限り、これを行う方法がないとは信じられません。

誰かがこれに対する答えを持っていることを願っています!

4

2 に答える 2

0
STATE.setOnItemClickListener(new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
        String selection = (String) parent.getItemAtPosition(position);
        int pos = -1;

        for (int i = 0; i < yourarray.length; i++) {
            if (yourarray[i].equals(selection)) {
                pos = i;
                break; 
            } 
        } 
        System.out.println("Position " + pos); //check it now in Logcat
    } 
}); 
于 2015-08-13T11:29:13.053 に答える
0

どのように対処するかは完全にはわかりませんが、アダプターがid適切に割り当てられていることを確認してから、その値をコールバックで使用してください。

于 2012-10-18T16:32:33.797 に答える