我试图制作一个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));
希望这可以帮助寻求解决方案的人。