我制作了一个示例聊天布局,它只是将 EditText 输入添加到 RecyclerView,但是正如您在这张图片中看到的第五个项目之后,它无法正常工作(数字是 EditText 输出){{ 3}}
片段类 =>
Boolean me = true ;
Boolean seen = false ;
@Override
public void onClick(View view) {
if (view.getId() == R.id.send_button) {
me = !me ;
seen = !seen ;
sendMessage();
}
}
private void sendMessage(){
String editTextString = editText.getText().toString() ;
Calendar calendar = Calendar.getInstance() ;
String time = calendar.get(Calendar.HOUR) + ":" + calendar.get(Calendar.MINUTE) ;
first_message.setVisibility(View.GONE);
if (editTextString.equals("")){
return;
}
E08Object object = new E08Object();
object.setMessage(editText.getText().toString());
object.setDate(time);
object.setMe(me);
object.setSeen(seen);
list.add(object) ;
adapter.notifyDataSetChanged();
fragment_recyclerView.smoothScrollToPosition(list.size());
editText.setText("");
}
适配器类 =>
@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
holder.textView.setText(list.get(position).getMessage());
holder.timeTextVIew.setText(list.get(position).getDate());
if (!list.get(position).getMe()) {
holder.seenImage.setVisibility(View.GONE);
holder.fragmentParent.setBackground(ContextCompat.getDrawable(Application.getContext() , R.drawable.person_message_rounded));
}
}
答案 0 :(得分:1)
请检查。当视图被回收时,您必须在 bindViewHolder 内的 else 块中重置值。
if (!list.get(position).getMe()) {
holder.seenImage.setVisibility(View.GONE);
holder.fragmentParent.setBackground(ContextCompat.getDrawable(Application.getContext() , R.drawable.person_message_rounded));
} else {
holder.seenImage.setVisibility(View.VISIBLE);
holder.fragmentParent.setBackground(ContextCompat.getDrawable(Application.getContext() , R.drawable.THE_DEFAULT_DRAWABLE));
}
如果此问题是由于回收造成的,这应该会有所帮助。如果这有帮助,请告诉我。此外,最好附加项目布局和回收站布局。