我有一个应用程序,其中每个页面/内容都是一个片段,在此之上,我有一个应用程序菜单栏片段,其中包含用于导航页面(片段)的按钮。我的问题是,如果我多次按下应用栏的同一个按钮,并且在我按下默认的手机后退按钮(左箭头)后,它不会立即返回到之前的页面,但它会在每次按下同一个按钮时导航相同的片段,导致留在同一个页面上。
我按了10次“收藏夹”页面的导航键,如果我想回到主页,我必须按10次“后退”按钮。
类MainActivity:public void run(){
private val TAG = "MainActivity"
private var currentFragment: Fragment? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (savedInstanceState != null) {
// Ripristina il fragment corrente
currentFragment = supportFragmentManager.getFragment(savedInstanceState, "currentFragment")
} else {
// Crea e visualizza il fragment iniziale
currentFragment = RecyclerFragment()
supportFragmentManager.beginTransaction()
.replace(R.id.container_main, currentFragment!!)
.commit()
}
val fragment = AppbarFragment()
supportFragmentManager.beginTransaction()
.replace(R.id.container_appbar, fragment)
.commit()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// Salva lo stato del fragment corrente
if (currentFragment != null) {
supportFragmentManager.putFragment(outState, "currentFragment", currentFragment!!)
}
}
}
类AppbarFragment:public void run(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.app_bar, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_favourites -> {
val favouritesFragment = FavouritesFragment() // Crea un'istanza del fragment delle preferite
requireActivity().supportFragmentManager.beginTransaction()
.replace(R.id.container_main, favouritesFragment) // Sostituisci il fragment corrente con il fragment delle preferite
.addToBackStack(null) // Aggiungi la transazione alla back stack per consentire il ritorno al fragment precedente
.commit()
true
}
R.id.action_search -> {
val searchFragment = SearchFragment() // Crea un'istanza del fragment di ricerca
requireActivity().supportFragmentManager.beginTransaction()
.replace(R.id.container_main, searchFragment) // Sostituisci il fragment corrente con il fragment di ricerca
.addToBackStack(null) // Aggiungi la transazione alla back stack per consentire il ritorno al fragment precedente
.commit()
true
}
else -> super.onOptionsItemSelected(item)
}
}
}我是新来的,我不知道是否有一个快速修复,或者也许我只是没有按照预期使用片段功能。
1条答案
按热度按时间bprjcwpo1#
你可以用
onBackPressed
您可以覆盖手机内置的默认后退按钮。你必须写出你想要它做什么的逻辑。
示例:使用上面的代码,后退按钮被完全禁用。什么都没发生。您可以放置一个Intent,当您按下后退按钮时,它将执行该Intent。您还可以(在记事本的情况下)对逻辑进行编码,以显示警告,询问您是要放弃还是继续。基本上任何你想要的。