Kotlin工具栏菜单图标问题

时间:2017-10-08 18:16:56

标签: java android menu kotlin

我将以下Java代码转换为Kotlin代码。 Android Studio不会显示任何错误消息 但结果却不同。我添加了两张模拟器结果图片 正如您所看到的,Java工作正常,并在工具栏中显示3点菜单图标。但是Kotlin代码不起作用 有人知道错误是什么吗?希望得到一些帮助。感谢。

爪哇:

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
                View view = inflater.inflate(R.layout.fragment_home, container, false);

                //...
                setHasOptionsMenu(true);

                return view;
            }



        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
                menuInflater.inflate(R.menu.menu_main, menu);
        }

        @Override
        public void onPrepareOptionsMenu(Menu menu) {
                MenuItem settings = menu.findItem(R.id.settings);
                MenuItem singOut = menu.findItem(R.id.sign_out);
                settings.setVisible(true);
                singOut.setVisible(false);
        }

enter image description here

科特林:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater!!.inflate(R.layout.fragment_home, container, false)

        //...
        setHasOptionsMenu(true)

        return view
    }



      override fun onCreateOptionsMenu(menu: Menu?, menuInflater: MenuInflater?) {
            menuInflater!!.inflate(R.menu.menu_main, menu)
        }

        override fun onPrepareOptionsMenu(menu: Menu?) {
            val settings = menu!!.findItem(R.id.settings)
            val singOut = menu.findItem(R.id.sign_out)
            settings.isVisible = true
            singOut.isVisible = false
        }

enter image description here

2 个答案:

答案 0 :(得分:0)

改变这个:

settings.isVisible = true
singOut.isVisible = false

为:

settings.visible = true
signOut.visible = true

请查看此文档以获取解释:https://kotlinlang.org/docs/reference/java-interop.html#getters-and-setters

更新:有问题的实际代码是正确的 - settings.isVisible应该有效。

答案 1 :(得分:0)

您尝试过吗?

settings.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
signout.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);