所以我有一个自动完成视图,当我输入时显示下拉…但我希望在活动开始时显示下拉列表.所以我发现这个answer表示使用showDropDown()应该可行.当在任何TouchListener或任何其他用户触发的事件上调用时,它确实适用于我的情况.但是如果我直接在onCreate()中使用它就无法工作…我的onCreate()中的以下代码可以工作
final AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteUserName);
String[] users = getResources().getStringArray(R.array.users);
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this,R.layout.compose_ac_list_item,users);
actv.setAdapter(adapter);
actv.setonTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// WORKS IF USED ON TOUCH
actv.showDropDown();
return false;
}
});
以下不起作用
final AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteUserName);
String[] users = getResources().getStringArray(R.array.users);
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this,R.layout.compose_ac_list_item,users);
actv.setAdapter(adapter);
actv.showDropDown();
解决方法:
因为当你调用setAdapter时,需要一些时间来膨胀所有列表项.在此期间,如果您调用showDropDown(),则listview尚未膨胀,因此无法显示下拉列表.你可以在调用showDropDown()之前给出一些延迟.但我不确定这是否是有效的解决方案,因为我们无法确定需要花多少时间来扩充列表项.
actv.setAdapter(adapter);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
actv.showDropDown();
}
}, 500);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。