2017-09-01 66 views
1

我在使用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(); 
} 

回答

1

您可以請改變你實現

考慮的事情是,當要顯示的下拉。通過詳細調查,我發現你的代碼中存在一些問題。

儘管問題的標題說,所以我認爲下拉實際上是可見的(如果你沒有得到像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