【发布时间】:2019-01-28 03:09:20
【问题描述】:
在尝试发布我的应用以进行生产时,发布前的报告通知我 Pixel 2 Android P Preview 设备上出现错误。该错误与我拥有的自定义 toast 消息有关,说“已将视图添加到窗口管理器”:
java.lang.IllegalStateException: View android.support.constraint.ConstraintLayout{efbeb21 V.E...... ......ID 0,0-788,1124 #7f0900db app:id/toast_correct_container} has already been added to the window manager.
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:328)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.widget.Toast$TN.handleShow(Toast.java:499)
at android.widget.Toast$TN$1.handleMessage(Toast.java:403)
at android.os.Handler.dispatchMessage(Handler.java:106)
at androidx.test.espresso.base.Interrogator.a(Interrogator.java:19)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:142)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:134)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:34)
at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:74)
at androidx.test.espresso.action.MotionEvents.a(MotionEvents.java:52)
at androidx.test.espresso.action.Tap.c(Tap.java:9)
at androidx.test.espresso.action.Tap.a(Tap.java:19)
at androidx.test.espresso.action.Tap$1.b(Tap.java:2)
at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:22)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:9)
at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:78)
at androidx.test.espresso.ViewInteraction.a(ViewInteraction.java:94)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:3)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
在 MainActivity OnCreate 中,我调用这个方法来膨胀 toast 视图:
private void initToastObjects() {
mToastCorrect = new Toast(this);
mToastWrong = new Toast(this);
// inflate view
LayoutInflater myInflater = LayoutInflater.from(this);
mLayoutCorrect = myInflater.inflate(R.layout.toast_correct, (ViewGroup) findViewById(R.id.toast_correct_container));
mLayoutWrong = myInflater.inflate(R.layout.toast_wrong, (ViewGroup) findViewById(R.id.toast_wrong_container));
}
我稍后会根据用户的选择动态地为 toast 设置不同的图像:
mToastCorrect.setView(mLayoutCorrect);
每次用户点击正确/错误答案时,我都会显示 toast 消息,如果显示,则取消另一个 toast:
// cancel previous wrong answer toast and display correct answer toast
try {
if (mToastWrong.getView().isShown()) {
mToastWrong.cancel();
}
mToastCorrect.show();
} catch (Exception e) {
e.printStackTrace();
}
感谢任何帮助!
- 我应该如何解决这个问题?
- 为什么我只在 Android P Preview 设备上收到此错误?
- 如果我在 MainActivity OnCreate 期间只为 View 充气一次,为什么会收到一条错误消息,提示该视图“已添加到窗口管理器”?
【问题讨论】:
-
您是否设法在真实设备或模拟器上重现此内容?我怀疑这只是发布前报告中的一个问题
-
@Mark 只是在模拟器上。我手头还没有真正的 Android P 设备。
标签: android illegalstateexception android-inflate android-toast