#android #kotlin #mutablelist
#Android #kotlin #изменяемый список
Вопрос:
Здравствуйте, я учусь создавать приложения с kotlin, но я получил stack с этой ошибкой, в которой говорится «Требуется повторяющийся, найденный список», как я могу решить эту проблему? пожалуйста, посмотрите мой код ниже, спасибо
class MainActivity : AppCompatActivity(),ProductView {
private lateinit var productAdapter: ProductAdapter
private var productList: MutableList<ProductData> = mutableListOf()
private lateinit var dataPresenter : DataPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initRecycler();
getProduct()
}
private fun getProduct() {
dataPresenter = DataPresenter(applicationContext,this)
dataPresenter.getProduct()
}
private fun initRecycler() {
productAdapter = ProductAdapter(this,productList)
rvMain.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
rvMain.adapter = productAdapter
}
override fun showLoading() {
pgMain.visibility = View.VISIBLE
}
override fun hideLoading() {
pgMain.visibility = View.GONE
}
override fun showProduct(products: List<ProductData>?) {
if (products?.size != 0){
this.productList.clear()
this.productList.addAll(products) // <= Required Iterable<ProductData>, Found List<ProductData>
productAdapter.notifyDataSetChanged()
}
}
}
Комментарии:
1. Я не слишком разбираюсь в kotlin, но я бы не удивился, что у него есть какой-то метод с именем
iterator
или похожий на это.Iterable
это интерфейс, который означает, что все, что вы передаете, должно реализовывать такой интерфейс, чтобы быть принятым.
Ответ №1:
Я подозреваю, что сообщение об ошибке на самом деле:
Required Iterable<ProductData>, Found List<ProductData>?
Знак вопроса в конце — это не просто пунктуация. Это обнуляемый индикатор в Kotlin. List<ProductData>
Не может быть null
, но List<ProductData>?
может. И я считаю, что для этого addAll()
требуется не- null
значение.
В идеале вы должны изменить ProductView
так, чтобы подпись для showProduct()
была fun showProduct(products: List<ProductData>)
.
В качестве альтернативы вы могли бы переписать showProduct()
, чтобы быть:
override fun showProduct(products: List<ProductData>?) {
if (products?.size != 0){
this.productList.clear()
products?.let { this.productList.addAll(it) }
productAdapter.notifyDataSetChanged()
}
}