Android Kotlin在操作栏点击"返回"按钮的事件



我尝试在按下顶部工具栏的后退按钮后获得操作

class TagsFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity as AppCompatActivity?)?.supportActionBar?.title = "$selectedItemText Tags"
(activity as AppCompatActivity?)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
// This callback will only be called when MyFragment is at least Started.
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
Log.d(InTorry.TAG, "TagsFragment: back BTN Pressed")
}
}
}

不幸的是,它不记录任何东西

我发现我应该添加OnBackPressedCallback,但它不起作用:

class TagsFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val selectedItemText = arguments?.getString("selectedItemText")//get arguments
(activity as AppCompatActivity?)?.supportActionBar?.title = "$selectedItemText Tags"
(activity as AppCompatActivity?)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)

(activity as AppCompatActivity?)?.onBackPressedDispatcher?.addCallback(
this,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Log.d(InTorry.TAG, "Fragment back pressed invoked")
// Do custom work here
// if you want onBackPressed() to be called as normal afterwards
if (isEnabled) {
isEnabled = false
requireActivity().onBackPressed()
}
}
}
)
}

亲切的问候杰克

put this in onCreate method
getActionBar().setDisplayHomeAsUpEnabled(true);
//and then override this method and find id.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
default:
return super.onOptionsItemSelected(item);
}
}

我知道有时候当android只是弃用他们的on Event函数是很痛苦的,无论如何这是你的代码:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});

你可以删除onClickListener接口并按你想要的方式添加快捷方式,像这样:

toolbar.setNavigationOnClickListener {
requireActivity().onBackPressedDispatcher.onBackPressed()
}

应该可以正常工作

谢谢大家我现在使用的代码:

  1. 对于设备返回按钮,在活动onCreate()

类HomeActivity: AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar?.setDisplayHomeAsUpEnabled(true)

onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Log.d(InTorry.TAG,"device back btn click")
//finish()
}
})
  1. 工具栏后退按钮箭头-现在我知道它像一个大菜单

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
    android.R.id.home -> {// this is my back button - simply home
    Log.d(InTorry.TAG,"Toolbar Back BTN Click")
    ...
    }
    R.id.top_menu_settings -> {
    Log.d(InTorry.TAG,"top_menu_settings click")
    true
    }
    R.id.top_menu_logout -> {
    Log.d(InTorry.TAG,"top_menu_logout click")
    Firebase.auth.signOut()
    gotoLogin()
    true
    }
    
    else -> super.onOptionsItemSelected(item)
    }
    }