Manage toolbar's navigation and back button from fragment in android

前端 未结 8 2028
庸人自扰
庸人自扰 2020-12-02 10:00

All of my fragments are controlled through ActionBarActivity (mainActivity), inside mainActivity a DrawerLayout is implemented and all the child fr

8条回答
  •  抹茶落季
    2020-12-02 10:39

    Probably the cleanest solution:

    abstract class NavigationChildFragment : Fragment() {
    
        abstract fun onCreateChildView(inflater: LayoutInflater,
                                       container: ViewGroup?,
                                       savedInstanceState: Bundle?): View?
    
        override fun onCreateView(inflater: LayoutInflater,
                                  container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {
            val activity = activity as? MainActivity
            activity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
            setHasOptionsMenu(true)
            return onCreateChildView(inflater, container, savedInstanceState)
        }
    
        override fun onDestroyView() {
            val activity = activity as? MainActivity
            activity?.supportActionBar?.setDisplayHomeAsUpEnabled(false)
            setHasOptionsMenu(false)
            super.onDestroyView()
        }
    
        override fun onOptionsItemSelected(item: MenuItem): Boolean {
            val activity = activity as? MainActivity
            return when (item.itemId) {
                android.R.id.home -> {
                    activity?.onBackPressed()
                    true
                }
                else              -> super.onOptionsItemSelected(item)
            }
        }
    }
    

    Just use this class as parent for all Fragments that should support navigation.

提交回复
热议问题