#android #kotlin #android-recyclerview #adapter
#Android #kotlin #android-recyclerview #адаптер
Вопрос:
У меня проблема с обновлением списка данных в адаптере RecyclerView,
Я вызываю веб-сервис, чтобы получить список данных в main.activity следующим образом :
private fun get_company_name(){
val request = buildService(ApiInterface::class.java)
val call = request.getCompanyList()
call.enqueue(object : Callback<List<CompanyModel>>{
override fun onResponse(call: Call<List<CompanyModel>>, response: Response<List<CompanyModel>>) {
if (response.isSuccessful){
indeterminateBar.visibility = View.INVISIBLE
frg_holder.apply {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = DidebanAdapter(response.body()!!)
}
}
}
override fun onFailure(call: Call<List<CompanyModel>>, t: Throwable) {
indeterminateBar.visibility = View.INVISIBLE
}
})
}
и это мой адаптер :
class DidebanAdapter(val didebans: List<CompanyModel>): RecyclerView.Adapter<DidebanViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DidebanViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.fragment_dideban, parent, false)
return DidebanViewHolder(view)
}
override fun getItemCount(): Int {
return didebans.size
}
override fun onBindViewHolder(holder: DidebanViewHolder, position: Int) {
holder.itemView.delete_dideban.setOnClickListener(View.OnClickListener { view ->
val id : Int = holder.itemView.dideban_id.text.toString().toInt();
val request = ApiClient.buildService(ApiInterface::class.java)
val call = request.deleteCompany(id)
call.enqueue(object : Callback<Boolean> {
override fun onResponse(call: Call<Boolean>, response: Response<Boolean>) {
notifyItemRemoved(position)
}
override fun onFailure(call: Call<Boolean>, t: Throwable) {
Log.e("msg","false")
}
})
})
return holder.bind(didebans[position])
}
}
class DidebanViewHolder(itemView : View): RecyclerView.ViewHolder(itemView){
private val title:TextView = itemView.findViewById(R.id.dideban_name)
private val dideban_id:TextView = itemView.findViewById(R.id.dideban_id)
fun bind(dideban: CompanyModel) {
title.text = dideban.Title
dideban_id.text = dideban.Id.toString()
}
}
в функции onBindViewHolder я задаю действие для удаления изображений, нажатого, он вызывает другой веб-сервис и удаляет элемент из базы данных, он работает правильно, но я хочу, чтобы мой адаптер обновлялся при удалении элемента.
я использую notifyItemRemoved (position), но он не может обновлять мой список по требованию.
Ответ №1:
Прежде notifyItemRemoved(position)
чем вы должны удалить элемент из списка вручную (адаптер не сделает этого за вас) didebans.remove(position)
Комментарии:
1. о, я не могу поверить, что забыл эту строку, большое спасибо