Я не знал, какой может быть правильный заголовок для этой проблемы.
Я делаю приложение для чата, и это часть внутри адаптера:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val msg = messages[position]
if (msg.who == "you"){
holder.messagemelayout.visibility = View.GONE
holder.messageyou.text = msg.message
}else{
holder.messageyoulayout.visibility = View.GONE
holder.messageme.text = msg.message
}
}
Таким образом, когда сообщение отправляется, будет me
, тогда раскладка для "вас" (messageyoulayout
) будет скрыта, и наоборот
Нет, когда я добавляю новые сообщения, подобные этому:
var count = 1
bbb.setOnClickListener {
messageslist.add(Chat("hey " + count.toString(), "me"))
adapter.notifyItemInserted(adapter.itemCount - 1)
count++
}
Результат таков:
И когда я не скрываю какие-либо макеты, то текст внутри макета, который не получает никаких обновлений, все еще заполняется случайными старыми материалами:
Надеюсь, проблема понятна.
Как я могу это исправить? Например, полностью удалить макет, который не обновляется или что-то в этом роде.
Заранее спасибо
EDIT:
Весь адаптер:
class ChatAdapter(val context: Context, private val messages: MutableList<Chat>) : RecyclerView.Adapter<ChatAdapter.ViewHolder>(){
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val msg = messages[position]
if (msg.who == "you"){
holder.messageyou.text = msg.message
holder.messageme.text = ""
holder.messageme.setBackgroundResource(0)
holder.messageyou.setBackgroundResource(R.drawable.round_corners_lightgray_color)
}else{
holder.messageme.text = msg.message
holder.messageyou.text = ""
holder.messageme.setBackgroundResource(R.drawable.round_corners_accent_color)
holder.messageyou.setBackgroundResource(0)
}
}
override fun getItemCount() = messages.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.chat, parent, false)
return ViewHolder(view)
}
class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!){
val messageyou = itemView!!.messageyou!!
val messageme = itemView!!.messageme!!
val messageyoulayout = itemView!!.messageyoulayout!!
val messagemelayout = itemView!!.messagemelayout!!
}
}
chat.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
android:id="@+id/malsehn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
app:cardBackgroundColor="@android:color/transparent"
app:cardElevation="0dp">
<LinearLayout
android:id="@+id/messagemelayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="4">
<android.support.constraint.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3">
<TextView
android:id="@+id/messageme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corners_accent_color"
android:paddingLeft="8dp"
android:paddingTop="6dp"
android:paddingRight="8dp"
android:paddingBottom="6dp"
android:text="TextView"
android:textColor="@android:color/white"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/messageyoulayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="4">
<android.support.constraint.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3">
<TextView
android:id="@+id/messageyou"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corners_lightgray_color"
android:paddingLeft="8dp"
android:paddingTop="6dp"
android:paddingRight="8dp"
android:paddingBottom="6dp"
android:text="TextView"
android:textColor="@android:color/black"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
</android.support.constraint.ConstraintLayout>
</LinearLayout>
</android.support.v7.widget.CardView>