2017-07-01 17 views
0
我在與我的應用程序顯示以下錯誤麻煩

Android的 - 內存泄漏與彈出窗口中Recyclerview

「E /窗口管理器:android.view.WindowLeaked:活動com.awt.myapp.MyList有泄露的窗口android.widget.PopupWindow $ PopupDecorView {84fdb1f VE ..... ....... D 0,0-369,120}原來在這裏添加...「

基本上我有一個recyclerview和適配器中,我在每行中都有一堆文本視圖,並且綁定時單擊它們的監聽器,因爲單擊其中一個文本視圖會彈出一個窗口。問題是,如果我在彈出窗口仍然可見時點擊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

如果您創建適配器上的監聽器實現的活動,當你點擊的項目的話來說,你可以彈出窗口的邏輯出口活動,並覆蓋上回壓到dimiss它。

+0

好了,去研究如何去這樣做,可能會回來了疑問:d感謝。 – Loop77

0

退出你的活動之前,您應該dissmiss在任何生命週期回調的彈出窗口(myPopupWindow),例如在onPause()或onDestroy()中。

+0

我不知道我是如何實際上定位從適配器內部創建的彈出窗口,但是從活動本身開始? – Loop77

+0

爲什麼你確定你彈出鑑於該適配器應該在你活動你對它的引用在您適配器和正確的數據[鏈接]在它充氣(https://stackoverflow.com/questions/39474114/彈出式窗口在-recyclerview適配器) –

+0

因爲存在用於recyclerview的每個元素的多個彈出窗口。我在適配器的ViewHolder中定義和擴充它。 – Loop77