fhu*_*cho 122 android autocompletetextview
我正在使用AutoCompleteTextView,当用户点击它时,我想显示建议,即使它没有文本 - 但setThreshold(0)工作方式完全相同setThreshold(1)- 因此用户必须输入至少1个字符才能显示建议.
Com*_*are 150
这是记录在案的行为:
当
threshold小于或等于0时,应用阈值1.
您可以手动显示下拉菜单showDropDown(),因此您可以安排在需要时显示.或者,子类AutoCompleteTextView和覆盖enoughToFilter(),返回true所有时间.
Dav*_*vra 116
这是我的班级InstantAutoComplete.这是AutoCompleteTextView和之间的事情Spinner.
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;
public class InstantAutoComplete extends AutoCompleteTextView {
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
public boolean enoughToFilter() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused && getAdapter() != null) {
performFiltering(getText(), 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在你的xml中使用它像这样:
<your.namespace.InstantAutoComplete ... />
Run Code Online (Sandbox Code Playgroud)
小智 45
最简单的方法:
只需使用setOnTouchListener和showDropDown()
AutoCompleteTextView text;
.....
.....
text.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
text.showDropDown();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
ale*_*lex 16
当只有一个InstantAutoComplete对象时,Destil的代码效果很好.虽然它不适用于两个 - 不知道为什么.但是当我把showDropDown()(就像CommonsWare建议的那样)放到onFocusChanged()这样的时候:
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
performFiltering(getText(), 0);
showDropDown();
}
}
Run Code Online (Sandbox Code Playgroud)
它解决了这个问题.
只是两个答案正确结合,但我希望它可以节省一些时间.
适配器最初不执行过滤.
未执行过滤时,下拉列表为空.
所以你可能必须先进行过滤.
为此,您可以filter()在添加完条目后调用:
adapter.add("a1");
adapter.add("a2");
adapter.add("a3");
adapter.getFilter().filter(null);
Run Code Online (Sandbox Code Playgroud)
小智 6
Destil上面的答案几乎可行,但有一个微妙的错误.当用户首先将焦点放在字段上时它会起作用,但是如果它们离开然后返回到字段,它将不会显示下拉列表,因为mPopupCanBeUpdated的值在隐藏时仍然为false.修复方法是将onFocusChanged方法更改为:
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
if (getText().toString().length() == 0) {
// We want to trigger the drop down, replace the text.
setText("");
}
}
}
Run Code Online (Sandbox Code Playgroud)
只需在 autoCompleteTextView 的触摸或单击事件或您想要的位置调用此方法即可。
autoCompleteTextView.showDropDown()
Run Code Online (Sandbox Code Playgroud)
你可以使用onFocusChangeListener;
TCKimlikNo.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
TCKimlikNo.showDropDown();
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74143 次 |
| 最近记录: |