MultiAutoCompleteTextView不在AlertDialog中显示下拉列表

问题描述:

我在使用MultiAutoCompleteTextView来显示建议,而我正在键入内容。我把MultiAutoCompleteTextView置于AlertDialog。现在它不显示下拉菜单。MultiAutoCompleteTextView不在AlertDialog中显示下拉列表

我的XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="" 
    android:orientation="vertical" 
    android:padding="20dp"> 

    <TextView 
     android:id="@+id/tv_query_statement" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp" 
     android:textColor="@color/colorTextWhite"/> 

    <MultiAutoCompleteTextView 
     android:id="@+id/et_query" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:focusableInTouchMode="true" 
     android:padding="10dp" 
     android:textColor="@color/colorTextWhite"/> 

    <android.support.v7.widget.AppCompatButton 
     android:id="@+id/btn_submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:padding="10dp" 
     android:text="Submit" 
     android:textColor="@color/colorTextWhite"/> 
</LinearLayout> 

内活动

private void setupQueryDialog() { 
    final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
    View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_query_dialog, null); 
    AppCompatButton btnsubmit = (AppCompatButton) view.findViewById(R.id.btn_submit); 
    final MultiAutoCompleteTextView mQueryEditor = (MultiAutoCompleteTextView) view.findViewById(R.id.et_query); 
    TextView mQueryStatement = (TextView) view.findViewById(R.id.tv_query_statement); 

    String[] commands = QueryHelper.getAllSqlCommands(mTableDetailSource); 
    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, commands); 

    mQueryEditor.setThreshold(1); 
    mQueryEditor.setAdapter(adapter); 
    mQueryEditor.showDropDown(); 

    mQueryEditor.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
      /*if (editable.toString().length() > 0) 
       mQueryEditor.showDropDown();*/ 
     } 
    }); 
    dialog.setView(view); 
    final Dialog d = dialog.create(); 
    btnsubmit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      submitQuery(mQueryEditor.getText().toString()); 
      d.dismiss(); 
     } 
    }); 
    dialog.show(); 
} 

您可以请改变你实现

考虑的事情是,当要显示的下拉。通过详细调查,我发现你的代码中存在一些问题。

尽管问题的标题说,所以我认为下拉实际上是可见的(如果你没有得到像WindowManager$BadTokenException任何异常)。

但问题在于对话框出现在下拉列表中,即下拉列表隐藏在对话框下方,并且位于您的活动中。

让我们检查一下。

你刚才的评论如下mQueryEditor.setAdapter(adapter);

String[] words = new String[]{ 
"ADD", "DELETE", "UPDATE", "DELETE FROM", "SELECT"}; 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, words); 

mQueryEditor.setThreshold(1); 
mQueryEditor.setAdapter(adapter); 
mQueryEditor.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 
//mQueryEditor.showDropDown(); // Need to comment this line 

一行代码,并添加触摸listener,它会帮助你,以显示下拉时,其上的用户触摸。

​​

注:通过调用activityonCreate()这个对话可以产生WindowManager$BadTokenException,然后应用程序将崩溃。在所有关键活动过程结束之后,尝试一下。

+0

我发现这个问题,它是'mQueryEditor.setTokenizer(new MyCustomTokenizer)'。并感谢昂贵的答案。 – Godwin