我试图制作一个AutoCompleteTextView,当过滤列表中只剩下1个选项时,它会自动填充自动完成功能。

到目前为止,这是我得到的:

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的下拉列表中是否只剩下1个项目。但是除此之外,我还遇到了麻烦。由于某些原因,setListSelection没有执行任何操作。如果是这样,我可以使用它来设置选定的项目,然后performCompetion应该照常运行。除此之外,我不确定setListSelection是相对于过滤后的列表还是相对于原始的较长列表而言的。但这是下一个要解决的问题。

因此,对于setListSelection为何不起作用或通常如何解决此问题的任何帮助,我们将不胜感激!

最佳答案

setListSelection也不适合我。

我查看了AutoCompleteTextView源代码,发现可以通过调用调用下拉菜单
onCommitCompletion(new CompletionInfo(0, index, null));

希望这可以帮助寻求解决方案的人。

07-24 09:47
查看更多