NewsApp
NewsApp copied to clipboard
Keeps returning index of -1
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<WeatherForecast>, private val listener: WeatherItemClicked ): RecyclerView.Adapter<WeatherViewHolder>() {
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()
}
} `