[Kotlin/Android] Navigation (Pop behavior, navigateUp vs Back, ActionBar)
Programming/Android 2020. 9. 1. 17:27반응형
1. Pop behavior 이란
뒤로 이동시, popUpTo으로 설정한 fragment로 이동한다. 또한 fragment까지 백스택 내용을 제거한다.
1) popUpToInclusive : true
- popUpTo으로 설정한 fragment까지 백스택에서 제거를 하고, popUpTo으로 설정한 fragment의 이전 fragment로 이동을한다.
2) popUpToInclusive : false
- popUpTo으로 설정한 fragment 이전까지만 백스택에서 제거를 하고, popUpTo으로 설정한 fragment로 이동한다.
2. 액션바에 뒤로가기 아이콘 연동하기 위한 navigateUp
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val navController = this.findNavController(R.id.myNavHostFragment)
// 1) 액션바에 네비게이션 컨트롤러 등록, 이후 백스택이 쌓이면 액션바에 뒤로가기 버튼이 노출된다.
NavigationUI.setupActionBarWithNavController(this, navController)
}
// 2) onSupportNavigateUp 오버라이드
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.myNavHostFragment)
// 3) 뒤로가기 버튼을 누르면 해당 메소드가 호출되고, 네비게이션 위로 이동한다.
return navController.navigateUp()
}
3. navigation Up vs Back
1) navigationUp
앱 내 뒤로가기 기능이다. 즉 보통 뒤로가기를 하다보면 앱이 홈 화면까지 진행이 되지만, 위로가기는 홈 화면까지 진행되지 않는다.
2) back
보통 우리가 생각하는 뒤로가기 기능이다. 홈 화면까지 이동된다. (onKeyBack)
4. 액션바에 메뉴 추가
1) res/navigation/navigation.xml
- 이동할 Fragment 화면 추가.
- name을 특정 화면에 메뉴를 보여줄 Fragemnt class로 지정
2) res/menu/overflow_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/aboutFragment"
android:title="@string/about" />
</menu>
3) 특정 화면에 메뉴를 보여줄 Fragemnt class
// setHasOptionMenu(true) 설정
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
var binding: FragmentTitleBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_title, container,false)
binding.playButton.setOnClickListener (
Navigation.createNavigateOnClickListener(R.id.action_titleFragment_to_gameFragment)
)
setHasOptionsMenu(true)
return binding.root
}
// 옵션 메뉴에 메뉴 추가
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.overflow_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}
// 옵션 메뉴에 아이템 클릭시, NavigationUI.onNavDestinationSelected 으로 이동
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return NavigationUI.onNavDestinationSelected(item!!, view!!.findNavController()) || super.onOptionsItemSelected(item)
}
반응형
'Programming > Android' 카테고리의 다른 글
[Kotlin/Android] DrawerLayout 특정 화면에서 사용자 액션 막기(화면 스와이프) With navigation (0) | 2020.09.02 |
---|---|
[Kotlin/Android] navigation safe args (0) | 2020.09.01 |
[Kotlin/Android] Navigation (0) | 2020.09.01 |
[Kotlin/Android] DataBinding에서 Data Class 사용 (0) | 2020.08.31 |
[Kotlin/Android] 벡터 드로어블(Vector Drawables) API 7 이상 (0) | 2020.08.28 |