Asa Carter
Asa Carter

Reputation: 2225

Kotlin - Cannot access method in another class

I have method called getEventId in the DataAdapter class but I'm unable to access it from my MainActivity class and not sure why?

DataAdapter

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
  }

  .....
}

MainActivity

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()
  }

  ...
}

Upvotes: 2

Views: 1554

Answers (1)

Networks
Networks

Reputation: 2212

You need to call getEventId(position) on an instance of the class not on the class itself.

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()
  }

  ...
}

If you need to call getEventId(position) without instantiating your class (which I doubt might be the case here), you need to add it in your companion object.

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
     } 
  }
  .....
}

Upvotes: 5

Related Questions