ventana tipos studio personalizado mensaje emergente ejemplo edittext dialogos dialogo crear con alerta android android-activity dialog fragment

android - tipos - Símbolo de ventana incorrecto, no se puede mostrar un cuadro de diálogo antes de crear una actividad o después de que esté oculta



tipos de dialogos en android studio (5)

Estoy usando una biblioteca de AppIntro en mi aplicación.

Tiene 3 diapositivas. Quiero preguntar algo al usuario cuando se muestre la tercera diapositiva. Para lograr eso estoy usando diálogos materiales por afollestad .

Mi código en la Actividad de AppIntro se ve así:

@Override public void onNextPressed() { if(this.pager.getCurrentItem() == 2) { MaterialDialog dialog = new MaterialDialog.Builder(getApplicationContext()) .title("QR Code scannen") .content("Möchtest du den QR Code scannen oder selbst eingeben?") .positiveText("eingeben") .negativeText("scannen") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { Intent intent = new Intent(getApplicationContext(), RegistrationActivity.class); startActivity(intent); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { // TODO } }) .show(); } }

Al ejecutar la aplicación, aparece el siguiente problema cuando me desplazo a la tercera diapositiva:

com.afollestad.materialdialogs.MaterialDialog$DialogException: Bad window token, you cannot show a dialog before an Activity is created or after it''s hidden. at com.afollestad.materialdialogs.MaterialDialog.show(MaterialDialog.java:1328) at com.afollestad.materialdialogs.MaterialDialog$Builder.show(MaterialDialog.java:1317) at com.ads.adstimer.fragment.Registration.RegistrationActivity.onNextPressed(RegistrationActivity.java:64) at com.github.paolorotolo.appintro.AppIntro$2.onClick(AppIntro.java:118) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21153) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Realmente no entiendo el problema. Porque la Actividad de AppIntro ya está cargada y espero que muestre un diálogo cuando se muestre un fragmento específico.

¿Cómo puedo lograr mostrar un diálogo cuando se muestra una diapositiva específica?


Esto puede resolverse confirmando que la Activity actual hasWindowFocus porque cuando obtiene el contexto en el fragmento, en lugar de exactamente qué actividad es, puede que no tenga windowFocus :

if (((Activity) mContext).hasWindowFocus()) { mDialog.show(); }


Use "this" en lugar de "getApplicationContext ()" si este error ocurre incluso dentro de la actividad.

mProgress = new MaterialDialog.Builder(this)


utilizar

MaterialDialog dialog = new MaterialDialog.Builder(YourActivityName.class)

no use getApplicationContext ().


MaterialDialog dialog = new MaterialDialog.Builder(getApplicationContext())

Supongo que debe pasar la instancia de la Activity aquí, no el contexto de la aplicación.


public class MainActivity extend Activity{ MaterialDialog dialog; protected void onCreate(Bundle savedInstanceState) { dialog = new MaterialDialog.Builder(OrderInfoActivity.this) .title("Reject?") .content("Are you reject this order?") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(OrderInfoActivity.this, "Option1", Toast.LENGTH_SHORT).show(); } }) .onNeutral(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(OrderInfoActivity.this, "Option 2", Toast.LENGTH_SHORT).show(); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(OrderInfoActivity.this, "Option 3", Toast.LENGTH_SHORT).show(); } }).build(); accept.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.show(); } }); } }

Esto es lo que estoy usando en este momento, y está funcionando

Espero eso ayude :)