tutorial studio personalizada how edittext dialogo crear con alerta android android-alertdialog

studio - set dialog android



La actividad ha filtrado la ventana en el método alertDialog show() (6)

Recibo un error de fuga de ventana en el tiempo de ejecución debido al uso de un AlertDialog.

He señalado la línea de error en el siguiente código:

Stacktrace:

08-18 02:48:04.489 28893-28893/? E/WindowManager﹕ Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here android.view.WindowLeaked: Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:281) at com.ms.ha.fragment.TourGuideLoadURLFragment$WebAppInterface.moveToNextScreen(TourGuideLoadURLFragment.java:116) at android.webkit.WebViewCore.nativeMouseClick(Native Method) at android.webkit.WebViewCore.nativeMouseClick(Native Method) at android.webkit.WebViewCore.access$6800(WebViewCore.java:59) at android.webkit.WebViewCore$EventHub.dispatchWebKitEvent(WebViewCore.java:1793) at android.webkit.WebViewInputDispatcher.dispatchWebKitEvent(WebViewInputDispatcher.java:689) at android.webkit.WebViewInputDispatcher.dispatchWebKitEvents(WebViewInputDispatcher.java:639) at android.webkit.WebViewInputDispatcher.access$800(WebViewInputDispatcher.java:78) at android.webkit.WebViewInputDispatcher$WebKitHandler.handleMessage(WebViewInputDispatcher.java:1153) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:814) at java.lang.Thread.run(Thread.java:841)

FirstActivity.java:

public class FirstActivity extends FragmentActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.fragment_tour_guide_web); ....... ....... webView.addJavascriptInterface(new WebAppInterface(this), "Android"); } public class WebAppInterface { Context mContext; /** * Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** * Intent - Move to next screen */ @JavascriptInterface public void moveToNextScreen() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( context); // set title alertDialogBuilder.setTitle("Your Title"); // set dialog message alertDialogBuilder .setMessage("Click yes!") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent i = new Intent(FirstActivity.this,SecondActivity.class); startActivity(i); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // if this button is clicked, just close // the dialog box and do nothing dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); --->leak window error } } }

No sé cómo resolver este problema.


Debes tener que cerrar / cancelar tu diálogo una vez que la actividad esté terminando. Ocurre generalmente si los diálogos no se descartan antes de que finalice la actividad.


Descarte el alertDialog en el método onPause (). es decir, llamada alertDialog.dismiss ()

Nota: las excepciones de WindowLeaked se producen generalmente si los cuadros de diálogo no se cierran antes de que termine la actividad.


No sé esto ayuda, pero a mí los problemas causaban multidex. En build.gradle

multiDexEnabled false


Recibirá un error porque ProgressDialog está ejecutando mientras se destruye su Activity . Debes descartar el diálogo antes de comenzar una nueva Activity .

.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { if (alertDialog != null && alertDialog.isShowing()) { alertDialog.dismiss(); } Intent i = new Intent(FirstActivity.this, SecondActivity.class); startActivity(i); } });

¡Espero que ayude!


También puede obtener una excepción de WindowLeaked si no está en el hilo de la IU cuando intenta mostrar el cuadro de diálogo. Solución fácil:

this.runOnUiThread(new Runnable() { @Override public void run() { // show dialog here } });


Verifique en su manifiesto si ha establecido permisos de internet:

<uses-permission android:name="android.permission.INTERNET" />