该场景是下一个:
1.打开第一个声明为setHasOptionsMenu(true)
的片段,从onViewCreated
的布局中查找工具栏视图,然后通过AppCompatActivity
的类接口(setSupportActionBar
)将其设置为活动。此外,它会覆盖onCreateOptionsMenu
,并设置与单个菜单SearchView
。
2.使用用于打开第一个片段的相同活动FragmentManager
打开第二个片段。重新设置所有与菜单有关的声明,但是在带有SearchView
的菜单上,它仅包含带有图标的菜单。
3.更改设备方向(旋转)。然后,首先将恢复第一个片段,并调用其onViewCreated
方法,其中AppCompatActivity
将其Toolbar
接收到setSupportActionBar
方法中。然后,将为第二个片段调用相同的过程(所有这些操作都通过状态还原机制自动运行)。
当按下活动片段工具栏上的“后退”按钮时,正在运行淡出动画时,第一个片段的SearchView
在此处可见,而路由返回完成的工具栏出现在第一个片段上片段,而不是SearchView
(还有工具栏的后退按钮可以执行任何操作)。
当旋转设备背面的工具栏被正常充气。
这是第一个片段的代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
this.toolbar(
toolbarId = R.id.toolbar_first_fragment,
title = getString(R.string.first_fragment_title),
textColor = android.R.color.black,
indicatorColor = android.R.color.black
)
this.view = FirstFragmentView(view, savedInstanceState, childFragmentManager)
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
menu?.clear()
inflater!!.inflate(R.menu.menu_scenarios, menu)
}
override fun onPrepareOptionsMenu(menu: Menu?) {
super.onPrepareOptionsMenu(menu)
if (view.menuItem == null) {
val menuItem: MenuItem = menu!!.findItem(R.id.action_search)
val searchView: SearchView = menuItem.actionView!! as SearchView
view.withSearchView(menuItem, searchView)
addOnQueryListener(searchView)
setSignalingExpandListener()
}
}
第二个片段的代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
this.toolbar(
indicatorColor = android.R.color.black,
textColor = android.R.color.black,
title = arguments!!.getString(KEY_CONTEXT)!!
)
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater) {
menu?.clear()
inflater.inflate(R.menu.menu_scenario_details, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.settings_menu_item) {
scenariosRoadmap.scenarioSettings()
return true
}
return super.onOptionsItemSelected(item)
}
toolbar
扩展方法:
fun Fragment.toolbar(
toolbarId: Int = R.id.toolbar,
title: CharSequence = "",
textColor: Int = R.color.colorPrimary,
backShown: Boolean = true,
indicatorId: Int? = null,
indicatorColor: Int = R.color.colorPrimary
) {
val toolbar = this.view!!.findViewById<Toolbar>(toolbarId)
compatActivity.setSupportActionBar(toolbar)
activity!!.title = title
val supportActionBar = compatActivity.supportActionBar
supportActionBar!!.setDisplayHomeAsUpEnabled(backShown)
if (indicatorId != null) {
supportActionBar.setHomeAsUpIndicator(indicatorId)
}
toolbar.navigationIcon?.setColorFilter(ContextCompat.getColor(context!!, indicatorColor), PorterDuff.Mode.SRC_ATOP)
toolbar.setTitleTextColor(ContextCompat.getColor(context!!, textColor))
}
val Fragment.compatActivity: AppCompatActivity
get() = activity!! as AppCompatActivity