Android showDropDown onCreate不起作用

所以我有一个自动完成视图,当我输入时显示下拉…但我希望在活动开始时显示下拉列表.所以我发现这个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);

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...