java.lang.IndexOutOfBoundsException:索引:2,大小:0 ArrayList Kotlin

时间:2019-09-05 12:35:27

标签: android kotlin android-recyclerview

我通过单击从回收器视图项中获取数据,但是我有空的ArrayList。我试过使用List,MutableList还是什么都没有。如何解决这个问题?

 private var list: List<City> = ArrayList()


 override fun onCityClick(position: Int) {
    list.get(position).name
    val intent = Intent(this, CityActivity::class.java)
    startActivity(intent)
    Log.e("SA onCityClick", list[position].name)
}

解决方案: 问题出在我的空名单中。我没有进入空名单,这就是我遇到问题的原因。我为此粘贴了解决方案:

override fun onCityClick(position: Int) {
    searchViewModel.getAllCities().observe(this, Observer { list ->
        list?.let { cities == list }
        Log.e("SA getAllCities", list[position].name)
        list.get(position)
  })
    val intent = Intent(this, CityActivity::class.java)
    startActivity(intent)
}

很抱歉没有粘贴有关MVVM的信息,谢谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

与其简单地传递点击位置,不如将名称传递给onCityclick。将您的适配器更新为

// In main class in you adapter implementation add below code
Adapter(args) { name: String -> //  name :your logic goes here}

在适配器类中

RAdapter(val ..arhs, val listner: onClicklistner ) { 
onBindVIEw { holder.view.clicklistner { listner.event(name) } }

这是一个粗略的实现,我想这应该会给您一个想法。

这是一个粗糙的示例,请分享您的完整代码以帮助您进行模式

答案 1 :(得分:0)

替换这个,希望这可以解决您的问题

override fun onCityClick(position: Int) {
if(list !=null && list.size>position){
list.get(position).name
val intent = Intent(this, CityActivity::class.java)
startActivity(intent)
Log.e("SA onCityClick", list[position].name)
}   
}else{
  Log.e("SA onCityClick", "Size- "+list.size+" -Pos- "+ position)     
}