我正在尝试在活动结束前显示一个对话框。我显示了对话框,然后按下OK
按钮,活动就被关闭了。但我发现窗户漏水了。这是我的密码。
主要活动
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("MainActivity", "popping backstack");
fm.popBackStack();
} else {
MyAlertDialog dialog=new MyAlertDialog(this);
dialog.displayDialog("Exit", "Do you wish to exit application?",0);
super.onBackPressed();
}
}
对话类
public void displayDialog(String title,String message,final int flag)
{
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle(title)
.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
passIntent(flag);
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog=builder.create();
dialog.show();
}
public void passIntent(int flag)
{
switch(flag)
{
case 0:
((Activity) context).finish();
break;
}
}
这是我的错误
11-05 13:48:23.935: E/WindowManager(1353): android.view.WindowLeaked: Activity com.mcommerce.main.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{26da0ed7 V.E..... R.....ID 0,0-480,284} that was originally added here
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
11-05 13:48:23.935: E/WindowManager(1353): at android.app.Dialog.show(Dialog.java:298)
11-05 13:48:23.935: E/WindowManager(1353): at com.mcommerce.dialog.MyAlertDialog.displayDialog(MyAlertDialog.java:63)
11-05 13:48:23.935: E/WindowManager(1353): at com.mcommerce.main.MainActivity.onBackPressed(MainActivity.java:256)
11-05 13:48:23.935: E/WindowManager(1353): at android.app.Activity.onKeyUp(Activity.java:2456)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.KeyEvent.dispatch(KeyEvent.java:2643)
11-05 13:48:23.935: E/WindowManager(1353): at android.app.Activity.dispatchKeyEvent(Activity.java:2707)
11-05 13:48:23.935: E/WindowManager(1353): at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:49)
11-05 13:48:23.935: E/WindowManager(1353): at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:258)
11-05 13:48:23.935: E/WindowManager(1353): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2276)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4020)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3982)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3713)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3874)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
11-05 13:48:23.935: E/WindowManager(1353): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
11-05 13:48:23.935: E/WindowManager(1353): at android.os.MessageQueue.nativePollOnce(Native Method)
11-05 13:48:23.935: E/WindowManager(1353): at android.os.MessageQueue.next(MessageQueue.java:143)
11-05 13:48:23.935: E/WindowManager(1353): at android.os.Looper.loop(Looper.java:122)
11-05 13:48:23.935: E/WindowManager(1353): at android.app.ActivityThread.main(ActivityThread.java:5257)
11-05 13:48:23.935: E/WindowManager(1353): at java.lang.reflect.Method.invoke(Native Method)
11-05 13:48:23.935: E/WindowManager(1353): at java.lang.reflect.Method.invoke(Method.java:372)
11-05 13:48:23.935: E/WindowManager(1353): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
11-05 13:48:23.935: E/WindowManager(1353): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我提到了很多的链接,但我仍然不能解决这个问题。任何人都请帮忙。提前谢谢。
发布于 2015-11-05 09:25:19
错误:
com.android.internal.policy.impl.PhoneWindow$DecorView{26da0ed7 V.E.最初添加的R.....ID 0,0-480,284}
您将得到此错误,因为Dialog
在完成Activity
后显示。
您的对话框将显示,并调用super.onBackPressed()
,这将完成您的活动。
尝尝这个
MyAlertDialog dialog=new MyAlertDialog(this);
dialog.displayDialog("Exit", "Do you wish to exit application?",0);
而不是
MyAlertDialog dialog=new MyAlertDialog(this);
dialog.displayDialog("Exit", "Do you wish to exit application?",0);
super.onBackPressed();
因此,请删除super.onBackPressed()
,然后它将解决您的问题。
发布于 2015-11-05 09:27:42
您的问题似乎是由于您在显示Activity
后立即离开Dialog
造成的。
@Override
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("MainActivity", "popping backstack");
fm.popBackStack();
} else {
MyAlertDialog dialog=new MyAlertDialog(this);
dialog.displayDialog("Exit", "Do you wish to exit application?",0);
// super.onBackPressed(); // <-- remove this and implement closing of the activity in the Dialog logic
}
}
https://stackoverflow.com/questions/33540546
复制相似问题