2017-01-14 4 views
5

Dies ist ein Bild eines AlertDialogs, der in meiner App angezeigt wird. Es sollte eine Verweigern und eine Schaltfläche akzeptieren.Fehlende Dialogschaltflächen unter Android 7.1.1

Wie man es sehen kann, hat nicht:

enter image description here

ich diesen Fehler nicht reproduzieren kann, wie ich mit Android 7.1 haben ein Telefon nicht. Das Bild wurde auf einem Google Pixel aufgenommen und an mich gesendet.

Alle anderen Android-Versionen, auf die diese App getestet wurde, sind diesem Fehler nicht begegnet. (Versionen 4.1, 6.0.1)

Hier Code der Methode des Dialogs zu schaffen:

/** 
* Creates a 2 options dialog. 
* @param context 
* @param title headline of the dialog 
* @param message main text of the dialog 
* @param accept listener for the accept button 
* @param deny listener for deny button 
* @param acceptText text of the positive answer button 
* @param denyText text of the negative answer button 
* @param cancelable weather a click to anywhere but the presented buttons dismisses the dialog 
* @return a created dialog instance. To display it call show() 
*/ 
public static AlertDialog createAcceptDenyDialog(Context context, 
               String title, String message, String acceptText, 
               String denyText, boolean cancelable, 
               DialogInterface.OnClickListener accept, 
               DialogInterface.OnClickListener deny, 
               DialogInterface.OnDismissListener dismiss){ 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) 
      .setTitle(title) 
      .setMessage(message) 
      .setPositiveButton(acceptText, accept) 
      .setNegativeButton(denyText, deny) 
      .setCancelable(cancelable) 
      .setOnDismissListener(dismiss); 
    return alertDialog.create(); 
} 

Dies ist der Code, den Dialog zu verursachen angezeigt werden:

public void showRequestErrorRetryDialog(String title, String message) { 
    Dialog dialog = DialogFactory.createAcceptDenyDialog(this 
      , title 
      , message 
      , getString(R.string.retry_button) 
      , getString(R.string.abort_button) 
      , true 
      , (dialogInterface, i) -> { 
       onStartServerCommunication(); 
       showProgressOverlay(); 
      } 
      , null 
      , null); 
    dialog.show(); 
} 

Wie Sie kann sehen, ich benutze retroLambda.

Hat jemand eine Idee, was passiert?

+0

Vielleicht übergeben Sie den falschen Kontext? Was ist das in deiner Methode? Was für mich in Android 7 gut funktioniert, ist 'new AlertDialog.Builder (context) .attributes.show()' .. (Attribute sind alle Methoden wie '.setTitle()' '.setPositiveButton()' etc .. – creativecreatorormaybenot

+0

Die Methode showRequestErrorRetryDialog wird innerhalb der Aktivität aufgerufen, in der der Dialog angezeigt werden soll "Dies" ist daher der Kontext der Aktivität – zetain

+0

Dies ist die Aktivität dann? Warum verwenden Sie nicht getApplicationContext()? – creativecreatorormaybenot

Antwort

12

Die Lösung, die für mich arbeitet war die folgenden Zeilen auf meinem style.xml hinzuzufügen:

// your main style 
<style name="YourStyleName" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:alertDialogTheme">@style/AlertDialogTheme</item> 
    <item name="alertDialogTheme">@style/AlertDialogTheme</item> 
</style> 

// dialog style 
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="buttonBarButtonStyle">@style/DialogButtonStyle</item> 
</style> 

// button's dialog style 
<style name="DialogButtonStyle" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"> 
    <item name="android:textColor">@color/colorPrimary</item> 
</style> 

Es funktioniert perfekt, ich hoffe, es wird euch helfen.

Verwandte Themen