【问题标题】:Android Kotlin Click Event for Back Button in Action Bar操作栏中后退按钮的 Android Kotlin 单击事件
【发布时间】:2022-12-04 08:43:00
【问题描述】:

按下顶部工具栏中的后退按钮后,我尝试采取行动

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()
                    }
                }
            }
        )
}

亲切的问候 杰克

【问题讨论】:

    标签: android kotlin


    【解决方案1】:
    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);
        }
    }
    

    【讨论】:

    • 不幸的是我有很多错误
    • 它应该是(作为 AppCompatActivity 的活动?)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)。我知道后退按钮是活动菜单(所有菜单)的一部分吗?
    【解决方案2】:

    我知道有时候当 android 不推荐使用他们自己的事件函数之一时会很痛苦,无论如何这是你的代码:

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

    如果您愿意,您可以删除 onClickListener 接口并将其快捷方式设置为:

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

    应该工作正常

    【讨论】:

      【解决方案3】:

      谢谢你们 我现在使用的代码:

      1. 对于设备后退按钮,在 Activity 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)
           }
          
          }
          

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多