所以我有一个自动完成 View ,它在我输入时显示一个下拉菜单......但我希望在 avtivity 开始时显示下拉列表。所以我发现这个 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 showDropDown onCreate 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26310662/

10-10 09:09