欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发解决popupWindow重叠报错问题

程序员文章站 2023-12-09 22:04:52
在popupwindow里面再弹出popupwindow的时候会报这样的错误 error/androidruntime(888): android.view.wi...

在popupwindow里面再弹出popupwindow的时候会报这样的错误

error/androidruntime(888): android.view.windowmanager$badtokenexception: unable to add window -- token android.view.viewroot$w@44ef1b68 is not valid; is your activity running? 

报错的意思大概就是说依赖的activity没了。

解决方法1

不要在当前的popupwindow里面继续show一个popupwindow,应该写一个接口回调到activity里面进行show,

解决方法2

如果只是简单的弹窗提醒的话,把第二次弹出的popupwindows改为toast,

public class verifysuccessdialog extends toast {
  public verifysuccessdialog(context context) {
    super(context);
    //设置toast的view
    setview(layoutinflater.from(context).inflate(r.layout.include_popwindow_verify, null));
    //弹出位置
    setgravity(gravity.center, 0, 0);
    //时长
    setduration(toast.length_short);
  }
}

用的地方就

new verifysuccessdialog(mactivity).show();

解决方法3

第二次弹窗改为dialog,设置dialog的style,在style.xml添加

<style name="verifydialog" parent="@android:style/theme.holo.dialog.noactionbar">
    <item name="android:windowbackground">@drawable/trans</item>
    <item name="android:windowframe">@null</item>
    <item name="android:windowisfloating">true</item>
    <item name="android:backgrounddimenabled">true</item>
    <item name="android:windowsoftinputmode">adjustpan</item>
  </style>

定义一个dialog类

public class verifysuccessdialog extends dialog {
  //用来设置时间自动关闭
  private int showtime;
  public verifysuccessdialog(context context) {
    super(context, r.style.verifydialog);
    setcontentview(r.layout.include_popwindow_verify);
  }
  public int getshowtime() {
    return showtime;
  }
  public void setshowtime(int showtime) {
    this.showtime = showtime;
  }
}

用就直接:

verifysuccessdialog dialog = new verifysuccessdialog(mactivity);

显示的地方

dialog.show();

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接