2014-09-17 3 views
2

Я пытаюсь сделать AutoCompleteTextView, который автоматически заполняет автозаполнение, когда в отфильтрованном списке осталось только 1 вариант.Android AutocompleteTextView заполняется, когда один параметр оставлен

Вот что у меня до сих пор:

import android.content.Context; 
import android.text.Editable; 
import android.text.Selection; 
import android.text.SpannableString; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.widget.MultiAutoCompleteTextView; 

public class InstantAutoComplete extends AutoCompleteTextView { 

private final static String TAG = "InstantAutoComplete"; 
public InstantAutoComplete(Context context) { 
    super(context); 
} 

public InstantAutoComplete(Context arg0, AttributeSet arg1) { 
    super(arg0, arg1); 
} 

public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) { 
    super(arg0, arg1, arg2); 

} 

@Override 
protected void replaceText(CharSequence text) { 
    Log.i(TAG, "REPLACING TEXT"); 
    super.replaceText(text); 

} 

@Override 
public CharSequence convertSelectionToString(Object obj) { 
    //This needs to return a Spanned object 
    return new SpannableString(super.convertSelectionToString(obj)); 
} 

@Override 
public void onFilterComplete(int count) { 
    Log.i(TAG, "Count: " + count); 
    super.onFilterComplete(count); 
    if(count == 1) { 
     clearListSelection(); 
     Log.i(TAG, "Is showing: " + isPopupShowing()); 
     setListSelection(0); 
     Log.i(TAG, "Selected: "+getListSelection()); 
     performCompletion(); 
    } 
} 
} 

До сих пор я понял, что я могу проверить, если есть слева в выпадающем меню в onFilterComplete только один пункт. Однако за этим я застрял. По какой-то причине setListSelection ничего не делает. Если бы это было так, я мог бы использовать это, чтобы установить выбранный элемент, а затем performCompetion должен работать как обычно. Кроме того, я не уверен, что setListSelection относится к отфильтрованному списку или к оригинальному более длинному списку; но это следующая проблема для решения.

Итак, любая помощь по поводу почему setListSelection не работает, или о том, как решить эту проблему в целом оценили!

ответ

1

setListSelection не работал для меня тоже.

Я посмотрел в исходном код AutoCompleteTextView и обнаружил, что выбор выпадающего может быть вызван по телефону onCommitCompletion(new CompletionInfo(0, index, null));

Надеется, что это помогает кто-то ищет решение.

+0

Вы должны вызвать 'showDropDown();' перед вызовом этого 'onCommitCompletion', иначе он не будет работать, поскольку фреймворк проверяет, открыто ли popupwindow и нет – k0sh

Смежные вопросы