kotlin Android默认的后退按钮在多个片段中无法正常工作

9wbgstp7  于 2023-05-18  发布在  Kotlin
关注(0)|答案(1)|浏览(192)

我有一个应用程序,其中每个页面/内容都是一个片段,在此之上,我有一个应用程序菜单栏片段,其中包含用于导航页面(片段)的按钮。我的问题是,如果我多次按下应用栏的同一个按钮,并且在我按下默认的手机后退按钮(左箭头)后,它不会立即返回到之前的页面,但它会在每次按下同一个按钮时导航相同的片段,导致留在同一个页面上。
我按了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)
    }
}

}我是新来的,我不知道是否有一个快速修复,或者也许我只是没有按照预期使用片段功能。

bprjcwpo

bprjcwpo1#

你可以用
onBackPressed

@Override
public void onBackPressed() {
 
    // implement your override logic here
   return;
}

您可以覆盖手机内置的默认后退按钮。你必须写出你想要它做什么的逻辑。
示例:使用上面的代码,后退按钮被完全禁用。什么都没发生。您可以放置一个Intent,当您按下后退按钮时,它将执行该Intent。您还可以(在记事本的情况下)对逻辑进行编码,以显示警告,询问您是要放弃还是继续。基本上任何你想要的。

相关问题