我在我的应用中显示以下错误时出现问题:
" E / WindowManager:android.view.WindowLeaked:Activity com.awt.myapp.MyList已泄露窗口android.widget.PopupWindow $ PopupDecorView {84fdb1f VE ..... .......最初添加的D 0,0-369,120} ......"
基本上我有一个recyclerview,并且在适配器中我在每一行都有一堆textview,并且绑定点击监听器,因为单击其中一个textview会弹出一个弹出窗口。问题是,如果我在弹出窗口仍然可见时点击Android后退按钮,则会出现上述错误。
据我所知,在我的活动中持有recyclerview,我可以添加一个' onBackPressed()'方法,但从这里我不知道如何获得对适配器中任何弹出窗口的引用(并在此阶段关闭它),因为我认为这是我需要做的。
下面是我的点击监听器代码,我已经尝试了一些选项,并且使用setFocusable只会导致后退按钮停止工作,因此不确定是否需要。
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View moreInfoView) {
myPopupWindow.setBackgroundDrawable(new ColorDrawable());
//myPopupWindow.setFocusable(true);
myPopupWindow.setTouchable(false); // Ignores taps
myPopupWindow.setOutsideTouchable(true); // Disappear when tapping anywhere on screen
int position = -tv.getHeight();
myPopupWindow.showAsDropDown(tv, 0, position);
((MyList) context).onToggleMoreInfo("show");
myPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
((MyList) context).onToggleMoreInfo("hide");
}
});
}
});
希望这是有道理的,如果您需要更多信息,请告诉我。任何建议将不胜感激。
答案 0 :(得分:0)
如果在适配器上创建一个实现活动的侦听器并在单击该项时调用它,则可以将弹出窗口逻辑导出到activity并在后退时覆盖以对其进行调整。
答案 1 :(得分:0)
在退出Activity之前,您应该在任何生命周期回调中忽略弹出窗口(myPopupWindow),例如:在onPause()或onDestroy()中。