반응형

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)
}

액션바 메뉴 아이콘

 

액션바 메뉴 아이콘 클릭시 노출되는 메뉴

 

반응형