2017-09-01 3 views
1

Ich benutze MultiAutoCompleteTextView für die Anzeige von Vorschlägen, während ich etwas eintippe. Ich setze MultiAutoCompleteTextView in eine AlertDialog. Jetzt wird das Drop-down-Menü nicht angezeigt.MultiAutoCompleteTextView zeigt kein Dropdown in AlertDialog

Mein 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> 

Innen Aktivität

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(); 
} 

Antwort

1

können Sie bitte Ihre Implementierung ändern

Betrachten wir die Sache, dass, , wenn Sie auf den Dropdown- zeigen wollen. Bei der detaillierten Untersuchung habe ich festgestellt, dass ein Problem in Ihrem Code.

Auch wenn die Frage Titel sagt so nehme ich an, dass die Drop-down tatsächlich sichtbar ist (wenn Sie irgendeine Ausnahme nicht bekommen, wie WindowManager$BadTokenException).

Aber das Problem ist, dass der Dialog über das Dropdown-Menü kommen, d. H. Drop-Down ist unter dem Dialog versteckt und es ist auf Ihre Aktivität.

Lassen Sie es uns überprüfen.

Sie Kommentar nur eine Zeile Code unten 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 

Und einen Hauch listener, es wird Ihnen helfen, sich auf den Dropdown-wenn der Benutzer Note zu zeigen.

mQueryEditor.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     mQueryEditor.showDropDown(); 
     mQueryEditor.requestFocus(); 
     return false; 
    } 
}); 

Hinweis: Durch diesen Dialog aus activity Aufruf onCreate() kann WindowManager$BadTokenException produzieren und dann wird die App zum Absturz bringen. Versuchen Sie es gleich, nachdem der gesamte kritische Aktivitätsprozess abgeschlossen ist.

+0

Ich habe das Problem gefunden und es war 'mQueryEditor.setTokenizer (new MyCustomTokenizer)'. Und danke für die teure Antwort. – Godwin

Verwandte Themen