使用 android 后退按钮按下回调
Using androix backButtonPressedCallback
我需要为片段实现自定义 onBackButtonPress 方法。处理注销后,LogoutFragment 中的示例。用户无法返回 backStack,但会显示 press again to exist
之类的消息并退出。我使用 this solution. But is not working. Then I saw this Android Doc 和 onBackPressedDispatcher
回调方法 CODE BELOW
。我想这会奏效。我添加了依赖项,但如何在不同的片段中实现它,只有 1 activity 和片段容器。 Kotlin 版本。
class LogoutFragment : DaggerFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
...
}
...
}
...
}
- onBackPressedDispatcher 提供了在每个片段中以不同方式处理后退按键的机会。因此,您可能必须在每个片段中都提供这段代码。
片段中:
var doubleBackToExitPressedOnce = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
val callback = object : OnBackPressedCallback(true ) {
override fun handleOnBackPressed() {
if (doubleBackToExitPressedOnce)
requireActivity().finish()
Toast.makeText(requireContext(), "Press again to go back",
Toast.LENGTH_LONG).show()
doubleBackToExitPressedOnce = true
}
}
- 如果你想在一个地方处理所有片段的回按,你可以通过操作参考中的 doBack() 方法来实现:How to implement onBackPressed() in Fragments?
//伪代码
fun doBack()
{
//find the fragment
val fragment = supportFragmentManager.findFragmentByTag(
//your fragment tag
)
if(fragment is FragmentA)
{
//do something
}
else if(fragment is FragmentB)
{
//do something else
}
else
{
activity.getSupportFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
我需要为片段实现自定义 onBackButtonPress 方法。处理注销后,LogoutFragment 中的示例。用户无法返回 backStack,但会显示 press again to exist
之类的消息并退出。我使用 this solution. But is not working. Then I saw this Android Doc 和 onBackPressedDispatcher
回调方法 CODE BELOW
。我想这会奏效。我添加了依赖项,但如何在不同的片段中实现它,只有 1 activity 和片段容器。 Kotlin 版本。
class LogoutFragment : DaggerFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
...
}
...
}
...
}
- onBackPressedDispatcher 提供了在每个片段中以不同方式处理后退按键的机会。因此,您可能必须在每个片段中都提供这段代码。
片段中:
var doubleBackToExitPressedOnce = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
val callback = object : OnBackPressedCallback(true ) {
override fun handleOnBackPressed() {
if (doubleBackToExitPressedOnce)
requireActivity().finish()
Toast.makeText(requireContext(), "Press again to go back",
Toast.LENGTH_LONG).show()
doubleBackToExitPressedOnce = true
}
}
- 如果你想在一个地方处理所有片段的回按,你可以通过操作参考中的 doBack() 方法来实现:How to implement onBackPressed() in Fragments?
//伪代码
fun doBack()
{
//find the fragment
val fragment = supportFragmentManager.findFragmentByTag(
//your fragment tag
)
if(fragment is FragmentA)
{
//do something
}
else if(fragment is FragmentB)
{
//do something else
}
else
{
activity.getSupportFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}