Recyclerview не обновляется после добавления элементаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Recyclerview не обновляется после добавления элемента

Сообщение Anonymous »

Я реализую чат в виде представления переработчика, но мне не удается обновить список при вводе нового сообщения. Вот класс адаптера:

Код: Выделить всё

class ConversationAdapter(messagesList: List) : RecyclerView.Adapter() {
private var m_MessagesList: List = messagesList

inner class MyViewHolder(view: View, context: Context) : RecyclerView.ViewHolder(view) {
var m_Sender: TextView = view.findViewById(R.id.conversation_sender)
var m_Message: TextView = view.findViewById(R.id.conversation_message)
var m_Date: TextView = view.findViewById(R.id.conversation_timestamp)
}

override fun getItemViewType(position: Int): Int {
return 0
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.conversationlayout, parent, false)
return MyViewHolder(itemView, parent.context)
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val message: ChatMessageModel = m_MessagesList[position]
val holderView = holder as MyViewHolder
holderView.m_Sender.text = message.getSender()
holderView.m_Message.text = message.getMessage()
holderView.m_Date.text = message.getTimestamp()
}

override fun getItemCount(): Int {
return m_MessagesList.size
}

fun updateSections(messagesList : List) {
m_MessagesList = messagesList
}
}
Вот вопрос, правильный ли метод updateSections. Я все еще новичок в Kotlin, но m_MessagesList — неизменяемый список. Можно еще так писать?
Это функция обновления во фрагменте разговора:

Код: Выделить всё

private fun sendMessage() {
val message = m_EditText.text.toString()
var formattedDate = DateTimeUtils.getDateTimeNowAsString()
val chatMessage = ChatMessage(0, m_MultiplayerRound.getUserId().toInt(), m_MultiplayerRound.getUsername(), m_UserId.toInt(), m_Username,  m_MultiplayerRound.getUserId().toInt(), m_MultiplayerRound.getUsername(), message, Date.from(Instant.now()))
val chatMessageModel = ChatMessageModel(chatMessage, m_MultiplayerRound.getUsername(), m_MultiplayerRound.getUserId())

m_MessagesList = m_MessagesList + chatMessageModel
m_ConversationAdapter.updateSections(m_MessagesList)
m_ConversationAdapter.notifyDataSetChanged()
}
Опять вопрос по поводу обновления m_MessagesList. Можно ли написать что-то подобное на Котлине? Я проверил с помощью отладчика, и переменная m_MessagesList, похоже, обновляется правильно. Наконец, почему представление переработчика не обновляется?
Это функция onCreateView фрагмента:

Код: Выделить всё

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val rootView = inflater.inflate(R.layout.fragment_conversation1, container, false)

val sendMessageButton = rootView.findViewById(R.id.send_message) as Button
sendMessageButton.setOnClickListener {
sendMessage()
}
m_EditText = rootView.findViewById(R.id.message_edittext)

val recyclerView: RecyclerView = rootView.findViewById(R.id.recycler_conversation)
val mLayoutManager = LinearLayoutManager(activity)
recyclerView.layoutManager = mLayoutManager
recyclerView.itemAnimator = DefaultItemAnimator()
recyclerView.adapter = m_ConversationAdapter
}
Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... dding-item
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»