Android - fragment에서 actionBar 활용하기
(1) 일단은 원하는 menu관련 xml 파일을 만든다.
(2) 위에서 만든 메뉴를 적용시키고자 하는 곳에서 setHasOptionsMenu(true); 를 호출한다.
나의 경우에는, 사용자가 아이템을 Longclick 하였을때, 그리고 selection_mode 불린변수가 false로 세팅 되어있을때 호출되겠다.
또한 아래의 코드에서는 액션바를 적용시키자마자 해당 액션바의 이름을 바꾸고있다.
(3) setHasOptionsMenu(true)를 호출하면 해당 fragment의 onCreateOptionsMenu() 가 호출됩니다.
여기에 실제로 메뉴를 inflate하는 코드를 작성하면 되겠다.
(4)
실행시키기 전,
res / values 디렉토리의 styles.xml 파일에 <item name="windowActionModeOverlay"> true </item> 속성을 추가하여야
새로운 메뉴를 inflate했을 때 기존의 액션바를 덮어쓰도록 할 수 있다.
(5) 여기까지만 한다면, 새로운 액션바가 생성이 된다.
근데 특정 이벤트에(런타임 중) 액션바의 속성을 바꿔야하는 경우 어떻게 해야할까?
ex) 이 경우에는 연필모양 버튼을 일시적으로 보이지 않게 해야하는 경우를 다룬다.
구글 문서를 참고하면, 위에서 이미 사용하였던 onCreateOptionsMenu()는 초기에 메뉴를 생성할때만 호출되고, 이후로 또 불리지 않는다고 한다.
따라서, 런타임도중에 속성을 바꿔야하는경우에는 우리는 onPreparedOptionsMenu()를 사용해야하고, 이를 위해서는 invalidateOptionsMenu() 를 호출해야합니다.
코드의 원하는 곳에 invalidateOptionsMenu() 를 호출하고,
호출하게 되면,
미리 작성해둔 onPreparedOptionsMenu() 가 호출된다.
내 코드의 경우에는 isSelectedMultiple이라는 불린변수가 참이면 연필모양의 메뉴아이템이 사라지고, 거짓인 경우 다시 나타나게 된다.
끄읕 -
'프로그래밍 > 안드로이드 앱 프로그래밍' 카테고리의 다른 글
[안드로이드 앱개발] bitmap drawable 사이즈 변경(재조정)하기 (0) | 2018.08.07 |
---|---|
[안드로이드 앱개발] layout 남은 공간 채우기 (Linear layout) (0) | 2018.08.07 |
Android - RecyclerView(ListView) 항목/아이템 사이에 구분선 넣기 (0) | 2018.01.12 |
안드로이드 프로그래밍 Intent(인텐트) 기초 사용법 - 기본자료형 외에도 직접만든class, ArrayList<T>등 도 보낼 수 있다! (1) | 2018.01.05 |
안드로이드 리스트뷰 사용법(Android listView) (0) | 2017.12.27 |