티스토리 뷰



지금 현재 구현하려고 하는 기능은, 네비게이션 드로어이다.


ActionBarDrawerToggle 클래스를 이용하여 드로어 토글을 구현했는데 토글버튼을 누르니까 위와 같은 에러메세지가 발생하였다.


원인은 아직 모르지만 검색을 해봤을때 드로어로 사용되는 뷰의 layout_gravity가 right로 설정되어 있는데, ActionBarDrawerToggle클래스의 이벤트처리 메소드인 아래 onDrawerOpend 메소드에서 드로어를 오픈할때

public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer) ;
    drawer.openDrawer(Gravity.RIGHT) ;

이런 방식으로 오픈하게끔 구현되어 있기 때문에 에러가 나는것 같다고 짐작해보았다.


왜냐면 ActionBarDrawerToggle 에서 돼지바를 눌렀을때 드로어가 나오는 방향이 왼쪽에서 오른쪽으로 나오게끔 미리 구현이 되어 있는데, 나는 드로어로 사용되는 뷰를 오른쪽에서 왼쪽으로 나오게끔 layout_gravity='right'로 설정했기 때문 일것으로 짐작이 간다.


그리하여 gravity가 LEFT로 설정된 드로어 뷰를 찾지 못한다는 에러를 내는게 아닐까 짐작이 간다.


근데 왜 아까 그냥 스와이프(화면 밀기)를 했을때는 드로어 뷰의 layout_gravity를 left로 하든 right로 하든 오류가 나지 않았을까? 이것도 생각해보면 바로 ActionBarDrawerToggle를 사용하지 않았기 때문이다. 이 놈의 리스너 콜백메소드 안에서 드로어를 무조건 왼쪽에서 오른쪽으로 열리게끔 구현되어 있기 떄문에 ActionBarDrawerToggle 를 사용하지 않으면 오류가 발생하지 않았던 것으로 추측된다. 이렇게 생각하면 모든것이 딱딱 들어맞는다.


이것을 해결하기 위해서는 내가 직접 DrawerLayout 내부에 이너 인터페이스인 DrawerLayoutListener를 구현한 커스텀 ActionBarDrawerToggle를 만들어야 한다.


이것은 스택 오버플로우에 나와 있어서 가져다 쓰기로 했다.


링크


이 클래스를 사용하면 오류가 안나길 기대하면서.. 다시 삽질을 시작한다. 내 추측이 맞기를..




댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함