How to introduce DialogFragment in this or how we can prevent Dialog dismissal when using function to display dialog.
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();
}
I am a newbie in Android so I don't know how to change this to a dialog which doesn't disappear when screen orientation changes.
You just need to create a DialogFragment class, create an AlertDialog, and do everything you're doing now on your AlertDialog. You can send the String in the constructor. Then, you can call back into the Activity for the click events.
Something like this for the DialogFragment (this goes in it's own Java file):
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;
}
}
Then, in the Activity, show the DialogFragment in your alertShow() method, and define the click handlers:
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);
}