【问题标题】:Android - Memory leak with popup window in RecyclerviewAndroid - Recyclerview 中带有弹出窗口的内存泄漏
【发布时间】: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


    【解决方案1】:

    如果您在实现活动的适配器上创建一个侦听器,并在您单击项目时调用它,您可以将弹出窗口逻辑导出到活动并在按下后覆盖以关闭它。

    【讨论】:

    • 好的,正在研究如何去做,可能会带着问题回来:D 谢谢。
    猜你喜欢
    • 2020-07-13
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2014-04-18
    相关资源
    最近更新 更多