Java MultiAutoCompleteTextView未在AlertDialog中显示下拉列表

Java MultiAutoCompleteTextView未在AlertDialog中显示下拉列表,java,android,spinner,autocompletetextview,Java,Android,Spinner,Autocompletetextview,我正在使用MultiAutoCompleteTextView在键入内容时显示建议。我将MultiAutoCompleteTextView放在AlertDialog中。现在它没有显示下拉列表 我的xml 内部活动 private void setupQueryDialog(){ final AlertDialog.Builder dialog=新建AlertDialog.Builder(getActivity()); View-View=LayoutFlater.from(getCon

我正在使用
MultiAutoCompleteTextView
在键入内容时显示建议。我将
MultiAutoCompleteTextView
放在
AlertDialog
中。现在它没有显示下拉列表

我的xml



内部活动

private void setupQueryDialog(){
final AlertDialog.Builder dialog=新建AlertDialog.Builder(getActivity());
View-View=LayoutFlater.from(getContext()).inflate(R.layout.layout\u query\u对话框,空);
AppCompatButton btnsubmit=(AppCompatButton)view.findViewById(R.id.btn_submit);
最终MultiAutoCompleteTextView mQueryEditor=(MultiAutoCompleteTextView)视图.findViewById(R.id.et_查询);
TextView mQueryStatement=(TextView)view.findViewById(R.id.tv\u query\u语句);
String[]commands=QueryHelper.getAllSqlCommands(mTableDetailSource);
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u微调器\u项,命令);
mQueryEditor.setThreshold(1);
mQueryEditor.setAdapter(适配器);
mQueryEditor.showDropDown();
mQueryEditor.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
/*如果(可编辑的.toString().length()>0)
mQueryEditor.showDropDown()*/
}
});
对话框.setView(视图);
最终对话框d=Dialog.create();
btnsubmit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
submitQuery(mQueryEditor.getText().toString());
d、 解雇();
}
});
dialog.show();
}

您可以更改您的实现

考虑一下,当您想要显示下拉列表时。通过详细调查,我发现您的代码中存在一些问题

即使问题标题这么说,我假设下拉列表实际上是可见的(如果您没有得到任何异常,如
WindowManager$BadTokenException

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

我们来看看。

您只需在
mQueryEditor.setAdapter(adapter)下面注释一行代码


注意:
活动
onCreate()
调用此对话框可能会产生
WindowManager$BadTokenException
,然后应用程序将崩溃。在所有关键活动流程完成后,请尝试相同的操作。

我发现了问题,它是
mQueryEditor.setTokenizer(新的MyCustomTokenizer)
。谢谢你昂贵的回答。
<?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();
}
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
mQueryEditor.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        mQueryEditor.showDropDown();
        mQueryEditor.requestFocus();
        return false;
    }
});