onOptionsItemSelected上的ID不匹配

时间:2019-11-20 17:43:31

标签: android android-fragments kotlin menu

当在我的父Fragment类上调用该方法时,菜单中的id不同,但标题相同。我从它的菜单中更改xml中的标题以确认,项目菜单也从那里开始。我更改了菜单ID,创建了另一个menu.xml,但仍继续。 我的课:

abstract class BaseFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        super.onCreateOptionsMenu(menu, inflater)
        inflater.inflate(R.menu.header_menu, menu)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId) {
            R.id.menu_company -> {
                Log.i("Company", "SELECTED")
            }
            R.id.menu_user -> {
                Log.i("USER", "SELECTED")
            }
        }
        return super.onOptionsItemSelected(item)
    }
}

我的菜单XML(header_menu.xml)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_user"
        android:icon="@drawable/ic_action_troca_usuario"
        android:title="User"
        app:showAsAction="always" />
    <item
        android:id="@+id/menu_company"
        android:title="Company"
        android:icon="@drawable/ic_action_seleciona_empresa"
        app:showAsAction="always"/>
</menu>

从BaseFragment扩展的片段之一:

class ControleDeVendaFragment : BaseFragment() {
...
}

在调试模式下,我尝试比较菜单中的ID,返回的结果是: item.itemid = 2131230966来自选定的菜单公司R.id.menu_company = -1000255。 我还尝试过使缓存无效并重新启动

1 个答案:

答案 0 :(得分:0)

我发现了问题。首先,我要清理项目并重建,然后更改菜单顺序。没有成功。而且我已经清理并再次重建,现在无需更改代码即可工作。我正在使用MacO,但不知道它是否有问题。我并不是第一次在MacO上做同样的事情。 Windows上的同一项目始终有效。无论如何。感谢您的见识。