Реализуйте пользовательский интерфейс в RecyclerViewAdapter с Kotlin in Android - PullRequest
1 голос
/ 30 апреля 2020

В моем приложении реализован RecyclerView. Я хочу изменить, добавить и удалить элементы удаленно с notifyItemRemoved и notifyItemChanged, а не с setDataChange из-за разницы в производительности. я хочу сделать некоторые объекты интерфейса, я думаю, но я не мог понять, как или где реализовать и переопределить метод inteface, т. д.

это моя реализация RecyclerView в MainActivity.kt

val linearLayoutManager = LinearLayoutManager(this)
    recyclerView.layoutManager = linearLayoutManager

    adapter = RecyclerAdapter(itemList)
    recyclerView.adapter = adapter

это мой интерфейс:

public interface AddItemListener {
    void addItem(int position);
}

и это мой класс RecyclerView с его ViewHolder:

class RecyclerAdapter(val items: ArrayList<RecyclerViewListModel>) :
RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
        MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_recycler_view, parent, false))

    override fun getItemCount(): Int = items.size

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.onBind()
    }


    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun onBind(){}
    }

}

У меня есть Плавающая кнопка в MainActivity. Я хочу иметь доступ к Viewholder для добавления элемента. заранее спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

Добавьте прослушиватель к вашему адаптеру следующим образом:

class RecyclerAdapter(val items: ArrayList<RecyclerViewListModel>, internal var listener: AddItemListener) :
RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
    MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_recycler_view, parent, false))

override fun getItemCount(): Int = items.size

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    holder.onBind()
}

fun addNewItem(item : RecyclerViewListModel){
   items.add(item)
   notifyItemInserted(items.size - 1)
}

fun removeItem(position : Int){
   items.removeAt(position)
   notifyItemRemoved(position)
}

inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
    View.OnClickListener {
    override fun onClick(v: View?) {
        listener. addItem(adapterPosition)
    }

    init {
        itemView.setOnClickListener(this)
    }

    fun onBind(){}
  }
}

добавьте прослушиватель кликов в вашем упражнении / фрагменте:

adapter = RecyclerAdapter(itemList, this)

реализуйте забаву AddItemListener:

override fun addItem(int position){
   // you can get item click position
   // you can show the dialog as like "Do you want to delete?"
   adapter.romoveItem(position) 
}

добавить новый предмет:

val fab: FloatingActionButton = findViewById(R.id.fab)
fab.setOnClickListener { view ->
     adapter.addNewItem(RecyclerViewListModel(verb1, verb2....))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...