2017-10-30 8 views
-1

ポップアップメニューを作成しようとしています。メニュー項目のオンクリックリスナーは、Boolean型の戻り値の型を必要とします。私はそれに戻り値の型を与えましたが、それでもすべてが赤で表示され、 "Boolean型の値が必要です"というメッセージが表示されます。誰かが私がここで間違っていることを教えてもらえますか?あなたが今持っていることはどこかにオブジェクト式とSAMのコンストラクタ間の半分の方法ですブール型の値が期待されます:ポップアップメニュー

val menuButton = findViewById<Button>(R.id.categoryImageButton) 
    menuButton.setOnClickListener(View.OnClickListener { 
     fun onClick(view: View){ 
      val popup = PopupMenu(this,menuButton) 
      popup.menuInflater.inflate(R.menu.popup_menu, popup.menu) 

      popup.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { 
       **fun onMenuItemClick(item: MenuItem): Boolean { 
        when (item.itemId) { 
         R.id.techItem -> { 
          return true 
         } 
         R.id.clothItem -> { 
          return true 
         } 
         else -> return false 
        } 
       }** 
      }) 
     } 
    }) 

答えて

0

(私は、メニューのクリックが何かを行っていない承知しています)。それを固定するためのいくつかのオプションがあります。

あなたはこのようになりますフルobject expression構文、使用することができます。

popup.setOnMenuItemClickListener(object: PopupMenu.OnMenuItemClickListener { 
    override fun onMenuItemClick(item: MenuItem): Boolean { 
     return when (item.itemId) { 
      R.id.techItem -> { 
       true 
      } 
      R.id.clothItem -> { 
       true 
      } 
      else -> false 
     } 
    } 
}) 

それとも:少し表現としてwhenを使用して、それを返すことによって

popup.setOnMenuItemClickListener(object: PopupMenu.OnMenuItemClickListener { 
    override fun onMenuItemClick(item: MenuItem): Boolean { 
     when (item.itemId) { 
      R.id.techItem -> { 
       return true 
      } 
      R.id.clothItem -> { 
       return true 
      } 
      else -> return false 
     } 
    } 
}) 

あなたは上記を向上させることができますがSAM conversionを使用して、ラムダで実装する必要のある単一の関数を定義できます。

popup.setOnMenuItemClickListener { item -> 
    when (item.itemId) { 
     R.id.techItem -> { 
      true 
     } 
     R.id.clothItem -> { 
      true 
     } 
     else -> false 
    } 
} 
+0

あなたは私にそんなに教えてくれました。私はSAMの変換が何であったか、あるいはオブジェクトを渡す必要があるかどうか分かりませんでした。 – DNA

関連する問題