Open mdridley opened 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() }
} `
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() {
}
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
// val forecast = WeatherRepository.instance.getCurrentWeather(it.id) val forecast = WeatherForecast() forecast.name = it.name forecasts.add(forecast) }
} `