【发布时间】:2020-05-13 18:15:41
【问题描述】:
我知道这已经问过几次了,但我还是什么都没得到(我是 android 开发的新手)。
所以我在 MainActivity.kt 中设置了我的后退按钮,如下所示:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
}
// Set up the back button on action bar
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.myNavHostFragment)
return navController.navigateUp()
}
}
我想要的是这个后退按钮在某些片段中被禁用,所以我尝试在其中一个片段中覆盖onBackPressed() 功能(这是互联网上大多数人所说的):
class DashboardFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Declare that this fragment has menu
setHasOptionsMenu(true)
// Set action bar title to "Main Dashboard"
(activity as AppCompatActivity).supportActionBar?.title = "Main Dashboard"
// Binding object for this fragment and the layout
val binding: FragmentDashboardBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_dashboard, container, false)
//Some codes here//
return binding.root
}
// This is where the error occured
override fun onBackPressed() {
super.onBackPressed()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater?.inflate(R.menu.nav_overflow_menu, menu)
}
}
但它返回一个错误说:
“OnBackPressed”覆盖 Nothing
我错过了什么吗?我已经在寻找解决方案,但仍然对此感到困惑。
【问题讨论】:
-
onBackPressed()是Activity中的函数,而不是Fragment中的函数。因此,您不能在DashboardFragment中覆盖它。 -
知道我必须如何覆盖它们吗?
-
我强烈建议不要禁用 BACK 按钮。但是,如果这样做,则需要在活动中覆盖
onBackPressed()并在那里做出决定。 -
@CommonsWare - 不再是这种情况了,您需要关注Provide custom back navigation documentation,它允许任何组件(包括片段)拦截和处理后退按钮。
-
@CommonsWare - 从技术上讲,它是 AndroidX Activity 的一部分,它甚至位于 Fragments 之下。只是碰巧更高级别的库(例如 Fragments 和 Navigation)也挂钩。
标签: android android-fragments kotlin