【发布时间】:2017-12-05 04:43:20
【问题描述】:
我的应用中显示以下错误时遇到问题:
"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");
}
});
}
});
希望这是有道理的,如果您需要更多信息,请告诉我。任何建议将不胜感激。
【问题讨论】:
标签: android memory-leaks android-recyclerview