【问题标题】:Why doesn't "setOnClickListener (this)" work in "for in"?为什么“setOnClickListener (this)”在“for in”中不起作用?
【发布时间】:2019-12-06 00:33:11
【问题描述】:

我想通过将 TextView 放入 MutableMap 来通过“for in”注册一个事件。 但它说“项目”不是“文本视图”。是什么原因?

菜单 ['开胃菜']。 setOnClickListener (this) 有效。

class MainActivity : AppCompatActivity(), View.OnClickListener {
   var menus :MutableMap<String, TextView> = mutableMapOf()

   // on create
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)

      init()
   }

   // init Methods 
   // This is where I talked about.
   private fun init() {
      menus["appetizers"] = menu_appetizers as TextView
      menus["entrees"] = menu_entrees as TextView
      menus["desserts"] = menu_desserts as TextView
      menus["cocktails"] = menu_cocktails as TextView

      for (item in menus!!) {
          if (item is TextView) {
             Log.v("Yes! TextView!", "Good!")
             item.setOnClickListener(this)
          } else {
             // always in
             Log.v("No! TextView!", "${item}")
          }
      }
   }

    // Click Methods
    override fun onClick(v: View?) {
      // Check Id
      when (v!!.id) {
          R.id.menu_bookmark -> Toast.makeText(this, "boomark", Toast.LENGTH_SHORT).show()
          R.id.menu_appetizers -> Toast.makeText(this, "appetizers Click!", Toast.LENGTH_SHORT).show()
          R.id.menu_entrees -> Toast.makeText(this, "entrees Click!", Toast.LENGTH_SHORT).show()
          R.id.menu_desserts -> Toast.makeText(this, "desserts Click!", Toast.LENGTH_SHORT).show()
          R.id.menu_cocktails -> Toast.makeText(this, "cocktails Click!", Toast.LENGTH_SHORT).show()
      }
    }
 }

【问题讨论】:

  • 请显示整个文件
  • 因为menus 是一个映射,所以你循环的是Entry 对象,而不是TextView 值对象。
  • GuanHongHuang - 我编辑了这个问题。
  • Vince Emigh - 我怎样才能让它工作?

标签: android kotlin android-event


【解决方案1】:

只需获取地图条目值

menus.forEach {

    it.value.setOnClickListener(this)
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    将此(menus.values 中的项目)更改为(menus.values 中的项目)并重试

    for (item in menus!!.values) {
          if (item is TextView) {
             Log.v("Yes! TextView!", "Good!")
             item.setOnClickListener(this)
          } else {
             // always in
             Log.v("No! TextView!", "${item}")
          }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2020-08-19
      • 2016-12-20
      相关资源
      最近更新 更多