Установка 2 адаптеров в 1 RecyclerView - PullRequest
0 голосов
/ 19 апреля 2019

Я делаю очень простое ChatActivity в своем приложении для Android. Мне просто нужны простые сообщения между мной и пользователем, не больше и не меньше.

Я знаю, что должен использовать Firebase Cloud Messaging , но я сейчас использую Firebase Cloud Firestore для отправки и получения сообщений.

Я пытаюсь использовать один RecyclerView для отображения моих сообщений и сообщений пользователя. Я уже сделал Adapters, но у меня есть запас по установке этих двух адаптеров (один для меня, а другой для пользователя) в один RecyclerView. Я видел этот вопрос, но я не понимал и не знал, как его использовать.

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 19 апреля 2019

То, что вам нужно, - это два разных макета, один для пользователя и один для вас, но только один адаптер, в представлениях Recycler может быть только один.

Ваш адаптер должен затем расширить RecyclerView.Adapter<RecyclerView.ViewHolder>, и мы должны реализовать getItemViewType и выполнить небольшую работу внутри onCreateViewHolder, и наш адаптер должен принять эту форму

class BillAmountsHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {

/**
 * Set view with values available
 */
fun setValues (value: String?) {
    itemView.bill_amount_account_radio_button.text = value
}

} Как насчетдва держателя?Представьте, что у вас есть объект, а затем список, возможно, одним из решений может быть NestedScrollView, но что, если это повторяется, возможно, у вас есть простой объект, затем список строк, а затем еще один объект и, наконец, другой список.Вероятно, нам следует использовать RecyclerView с несколькими держателями

Затем наш адаптер должен расширить RecyclerView.Adapte, и мы должны реализовать getItemViewType и выполнить небольшую работу внутри onCreateViewHolder, и наш адаптер должен принять эту форму

class StoreAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var result: List<YOUR-COMPLEX-OBJECT>? = null

/**
 * Get item
 */
override fun getItemViewType(position: Int): Int {
    return position
}

/**
 * Create view depending of the type of the viewgroup
 * changing to have a header as a holder
 * @param parent ViewGroup
 * @param viewType Int type
 */
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return if (viewType == 0)
        StoreHeaderHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_stores_info, parent, false))
    else
        StoreHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_use_place, parent, false))
}

/**
 * Initialize the holder StoreHolder
 */
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    if (position == 0) {
        val holderHeader = holder as StoreHeaderHolder
        holderHeader.setValues(infoListener)
    } else {
        val holderBody = holder as StoreHolder
        holderBody.setValues(result?.get(position - 1), distance)
    }
}

/**
 * Get size items
 */
override fun getItemCount(): Int {
    return if (result != null)
        result!!.size + 1
    else
        0
}
}

Пожалуйста, проверьте эту ссылку: https://medium.com/knowing-android/recyclerview-with-two-holders-320fc83759c0 Для реализации Java вы можете найти ее здесь: https://gist.github.com/dinorahtovar/bfc8bf3b41f70838beaa5d9089b6bda9#file-recyclerview-recyclerviewadapter-y-recyclerviewholder

...