2017-10-08 91 views
-1

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

的Java:

 @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

回答

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应该工作。

+0

可见不存在 –

+0

我的不好,你的变种有问题应该工作。它将调用setVisbile(boolean)方法。 你可以随时通过工具 - > Kotlin - >显示Kotlin字节码并按下“反编译”按钮 – tapchicoma

+0

它应该但它没有检查代码的Java代表。它的奇怪可能是一个错误? –