1

Wie man DialogFragment in dieses einführt oder wie man Dialogentlassung verhindern kann, wenn man Funktion benutzt, um Dialog anzuzeigen.Wie verwende ich DialogFragments, um das Dialogfeld während der Bildschirmdrehung zu speichern, wenn ich die Funktion für alertDialog verwende?

public void alertShow(String s){ 
    //Game Ended...!!! 
    android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.AlertDialog.Builder(this); 

    // Setting Dialog Title 
    if(s.equals("You") || (s.contains("P"))) 
     alertDialog.setTitle("Congratulations..."); 
    else 
     alertDialog.setTitle("Game's Up..."); 

    // Setting Dialog Message 
    if(s.equals("You") || s.contains("P")) 
     alertDialog.setMessage(s+" Win The Game..."); 
    else 
     alertDialog.setMessage("You Lose... I Win..."); 

    final ImageView img = new ImageView(this); 
    if(s.equals("You") || (s.contains("P"))) 
     img.setImageResource(R.drawable.firecrackers); 
    else 
     img.setImageResource(R.drawable.mmm); 

    alertDialog.setView(img); 

    // Setting Dialog Cancellation 
    alertDialog.setCancelable(false); 

    // Setting Positive "Yes" Button 

    SessionClass sessionClass = (SessionClass)getApplicationContext(); 
    final String str = sessionClass.getPlayer(); 
    alertDialog.setPositiveButton("Try Again", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      Intent i; 
      if(null != str && str.contains("2")){ 
       i = new Intent(MainActivity2.this, Game1_1.class); 
       startActivity(i); 
      } 
      finish(); 
     } 
    }); 

    // Setting Negative "NO" Button 
    alertDialog.setNegativeButton("Main Menu", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      Intent intent = new Intent(MainActivity2.this, MainActivity2.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); 
      startActivity(intent); 
      finish(); 
     } 
    }); 

    // Showing Alert Message 
    alertDialog.show(); 
} 

Ich bin ein Neuling in Android, also weiß ich nicht, wie dies zu einem Dialog zu ändern, das nicht bei der Bildschirmausrichtung ändert verschwindet.

+0

Hier finden Sie aktuelle Kunst dieses Tutorial: http://www.androidbegin.com/tutorial/android-dialogfragment-tutorial/ –

+0

ich habe bereits auf die Aktivität meiner Eltern-Klasse erweitert dann, wie ich FragmentActivity erstrecken kann. Und gibt es keine andere Möglichkeit, dies zu tun, ohne .xml AlertDialogs zu erstellen? –

Antwort

1

Sie müssen nur eine DialogFragment-Klasse erstellen, einen AlertDialog erstellen und alles, was Sie gerade tun, auf Ihrem AlertDialog ausführen. Sie können die Zeichenfolge im Konstruktor senden. Anschließend können Sie die Aktivität für die Klickereignisse erneut aufrufen.

So etwas wie dies für die DialogFragment (dies geht in einem eigenen Java-Datei):

import android.support.v7.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 

public class GameDialogFragment extends DialogFragment { 

    String s; 

    public GameDialogFragment(String str) { 
     this.s = str; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     String title = ""; 
     String message = ""; 

     if(s.equals("You") || (s.contains("P"))) 
      title = "Congratulations..."; 
     else 
      title = "Game's Up..."; 

     if(s.equals("You") || s.contains("P")) 
      message = s+" Win The Game..."; 
     else 
      message = "You Lose... I Win..."; 

     final ImageView img = new ImageView(getActivity()); 
     if(s.equals("You") || (s.contains("P"))) 
      img.setImageResource(R.drawable.firecrackers); 
     else 
      img.setImageResource(R.drawable.mmm); 

     AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity()); 

     alertBuilder.setView(img); 


     AlertDialog dialog = builder.setTitle(title) 
       .setMessage(message) 
       .setPositiveButton("Try Again", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         ((MainActivity2) getActivity()).clickedYes(); 
        } 
       }) 
       .setNegativeButton("Main Menu", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         ((MainActivity2) getActivity()).clickedNo(); 
        } 
       }) 
       .create(); 

      return dialog; 
    } 
} 

Dann wird in der Aktivität, zeigt die DialogFragment in Ihrem alertShow() -Methode, und definieren Sie den Klick-Handler:

public void alertShow(String s){ 
    new GameDialogFragment(s).show(getFragmentManager(), ""); 
} 

public void clickedYes() { 
    SessionClass sessionClass = (SessionClass)getApplicationContext(); 
    String str = sessionClass.getPlayer(); 
    Intent i; 
    if(null != str && str.contains("2")){ 
     i = new Intent(MainActivity2.this, Game1_1.class); 
     startActivity(i); 
    } 
} 

public void clickedNo() { 
    Intent intent = new Intent(MainActivity2.this, MainActivity2.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(intent); 
} 
+0

Vielen Dank Herr ... großartige Erklärung ... –

0

Verwenden Sie eine DialogFragment oder setzen Sie ein Flag und triggern Sie den Alarmdialog nach der Rotation neu.

Dies wurde beantwortet here.

+0

Ich habe meine Elternklasse bereits auf die Aktivität erweitert, wie kann ich dann FragmentActivity erweitern. Und gibt es keine andere Möglichkeit, dies zu tun, ohne .xml AlertDialogs zu erstellen? –

Verwandte Themen