Kotlin - 无法访问另一个类中的方法

Asa*_*ter 2 android kotlin

getEventId我在类中调用了方法DataAdapter,但无法从MainActivity类中访问它,不知道为什么?

数据适配器

class DataAdapter (events: ArrayList<Array<String>>) : RecyclerView.Adapter<DataAdapter.ViewHolder>() {

  private val TAG = "Adapter"

  private val events = events

  inner class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
      var id = ""
      val title: TextView = view.txtTitle
      val date: TextView = view.txtDate
  }

  fun getEventId (position: Int): Int? {
    return if (events.isNotEmpty()) events[position][0].toInt() else null
  }

  .....
}
Run Code Online (Sandbox Code Playgroud)

主要活动

class MainActivity : AppCompatActivity(), RecyclerItemClickListener.OnRecyclerClickListener {

  private val eventsDatabase: DatabaseHelper = DatabaseHelper(this)
  private var events = ArrayList<Array<String>>()

  ...

  override fun onItemClick(view: View, position: Int) {
      var itemId = DataAdapter.getEventId(position)

      Toast.makeText(this, "Normal tap on id: $itemId", Toast.LENGTH_SHORT).show()
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

Net*_*rks 5

您需要调用getEventId(position)类的实例而不是类本身。

class MainActivity : AppCompatActivity(), RecyclerItemClickListener.OnRecyclerClickListener {

  private val eventsDatabase: DatabaseHelper = DatabaseHelper(this)
  private var events = ArrayList<Array<String>>()
  private var adapter = DataAdapter(arrayListOf<Array<String>>())

  ...

  override fun onItemClick(view: View, position: Int) {
      var itemId = adapter.getEventId(position)

      Toast.makeText(this, "Normal tap on id: $itemId", Toast.LENGTH_SHORT).show()
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

如果您需要getEventId(position)在不实例化您的类的情况下进行调用(我怀疑这里可能是这种情况),您需要将其添加到您的伴生对象中。

class DataAdapter (events: ArrayList<Array<String>>) : RecyclerView.Adapter<DataAdapter.ViewHolder>() {

  private val TAG = "Adapter"

  private val events = events

  inner class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
      var id = ""
      val title: TextView = view.txtTitle
      val date: TextView = view.txtDate
  }



  companion object{
     fun getEventId (position: Int): Int? {
         return if (events.isNotEmpty()) events[position][0].toInt() else null
     } 
  }
  .....
}
Run Code Online (Sandbox Code Playgroud)