Anuj-Kumar-Sharma / NewsApp

Android app for displaying News in a RecyclerView
41 stars 45 forks source link

Keeps returning index of -1 #9

Open mdridley opened 2 years ago

mdridley commented 2 years ago

I have checked and re-checked my code... but my setOnClickListener is always returning -1.

I have tried the deprecated adapterPosition, absoluteAdapterPosition and bindingAdapterPosition with similar results.

` class WeatherListAdapter( private val items: ArrayList, private val listener: WeatherItemClicked ): RecyclerView.Adapter() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WeatherViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_weather, parent, false)
    val viewHolder = WeatherViewHolder(view)

    view.setOnClickListener {
        val position: Int = viewHolder.a
        if (position > 0) {
            listener.onItemClicked(items[position])
        }
    }

    return WeatherViewHolder(view)
}

override fun onBindViewHolder(holder: WeatherViewHolder, position: Int) {
    val currentItem = items[position]
    holder.title.text = currentItem.name
}

override fun getItemCount(): Int {
    return items.size
}

}

class WeatherViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { var title: TextView = itemView.findViewById(R.id.locationName) }

interface WeatherItemClicked { fun onItemClicked(item: WeatherForecast) } `

` class MainActivity : AppCompatActivity(), WeatherItemClicked { private lateinit var weatherListAdapter: WeatherListAdapter

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

    weatherView.layoutManager = LinearLayoutManager(this)
    val forecasts = loadCapitalForecasts()
    weatherListAdapter = WeatherListAdapter(forecasts, this)
    weatherView.adapter = weatherListAdapter
}

private fun loadCapitalForecasts(): ArrayList<WeatherForecast> {
    val cities = mutableListOf<City>()
    cities.add(City(1, "Montgomery", "Alabama"))
    cities.add(City(2, "Juneau", "Alaska"))

    val forecasts = ArrayList<WeatherForecast>()
    cities.forEach {

// val forecast = WeatherRepository.instance.getCurrentWeather(it.id) val forecast = WeatherForecast() forecast.name = it.name forecasts.add(forecast) }

    return forecasts
}

override fun onItemClicked(item: WeatherForecast) {
    Toast.makeText(this, "Ready to load forecast for ${item.name}", Toast.LENGTH_LONG).show()
}

} `