본문 바로가기
안드로이드

[Android] Powermenu android.view.windowLeaked Error

by Banlim 2020. 12. 2.

[잊어버릴까봐 기록]

 

skydove library에서 제공하는 powermenu를 사용하다가 발생한 Error이다.

위 에러는 해당 Activity에서 powermenu를 show한 후, 엑티비티를 나갈 때 이 다이얼로그를 dismiss하지 않아서 생기는 현상이다. 따라서, Activity를 나갈 때, 명시적으로 dismiss하면, 위 에러를 해결할 수 있다.

 

github.com/skydoves/PowerMenu

 

skydoves/PowerMenu

:fire: The powerful and easiest way to implement modern material popup menu. - skydoves/PowerMenu

github.com

 

PowermenuActivity.java

@Override
protected void onPause(){
    super.onPause()
    if(powerMenu != null && powermenu.isShowing()){
    	powerMenu.dismiss();
    }
}

 

+) 추가로 이 PowerMenu가 RecyclerAdapter에서 구현이 되었을 경우 명시적으로 dismiss하는 방법이다.

우선, 해당 Adapter에 임의로 onDestroy() 메소드를 구현한다. (override한 메소드가 아니기 때문에 꼭 onDestroy라는 이름을 사용하지 않아도 된다.)

 

RecyclerAdapter.java

public void onDestroy(){
	if(powerMenu != null) && powerMenu.isShowing()){
    	powerMenu.dismiss();
    }
}

 

PowermenuActivity에 recyclerview가 있고, 이 recyclerview의 adapter가 RecyclerAdapter 파일을 통해 만들어진다.

다시 PowermenuActivity로 돌아가 아래와 같은 코드를 작성한다.

recyclerview가 있는 activity에서 해당 adapter에서 정의한 메소드를 호출함으로써 Adapter에서 구현된 Powermenu도 쉽게 dismiss할 수 있다.

 

PowermenuActivity.java

private RecyclerAdapter adapter;

@Override
protected void onPause(){
    super.onPause()
    if(powerMenu != null && powermenu.isShowing()){
    	powerMenu.dismiss();
    }
    if(adapter != null){
    	adapter.onDestroy();
    }
}