Android 片段和适配器问题

时间:2021-03-16 10:16:57

标签: java android

我制作了一个示例聊天布局,它只是将 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));

        }
}

1 个答案:

答案 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));
}

如果此问题是由于回收造成的,这应该会有所帮助。如果这有帮助,请告诉我。此外,最好附加项目布局和回收站布局。