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이라는 불린변수가 참이면 연필모양의 메뉴아이템이 사라지고, 거짓인 경우 다시 나타나게 된다.



끄읕 -

+ Recent posts