如果我在回收站视图上滚动,则会中继错误的某些布局,这些布局不应该存在。 我在Google上进行了搜索,发现了以下信息:RecyclerView adapter showing wrong images,但对于我的代码却不起作用,我也发表了自己的信息。请帮助 我谢谢你!
MessageAdpater类:
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder>
{
public static final int MSG_TYPE_LEFT = 0;
public static final int MSG_TYPE_RIGHT = 1;
private Context context;
public static List<Chat> chats;
private String senderName;
private StringBuilder stringBuilder;
private int i, stringLenght;
private String string, strings;
public static boolean[] longClick;
public static long clickedMessages = 0;
public static ViewHolder viewHolder;
public static int position;
public static Chat chat;
public RecyclerView messageRecycler;
private FirebaseUser user;
public MessageAdapter(Context context, List<Chat> chats)
{
this.context = context;
this.chats = chats;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
if (viewType == MSG_TYPE_RIGHT)
{
View view = LayoutInflater.from(context).inflate(R.layout.chat_item_right, parent, false);
return new MessageAdapter.ViewHolder(view);
}
else
{
View view = LayoutInflater.from(context).inflate(R.layout.chat_item_left, parent, false);
return new MessageAdapter.ViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position)
{
final Chat chat = chats.get(position);
longClick = new boolean[chats.size()];
MessageAdapter.position = position;
MessageAdapter.chat = chat;
viewHolder = holder;
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("Users").child(chat.getSender()).addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
senderName = String.valueOf(dataSnapshot.child("name").getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {}
});
holder.username.setText(senderName);
if (chat.getAnswered().equals("true"))
{
holder.AnsweredBackground.setVisibility(View.VISIBLE);
holder.answered.setText(chat.getAnsweredMessage());
holder.answeredFrom.setText(chat.getAnsweredMessageFrom());
}
if (chat.getEdited().equals("true"))
{
holder.edited.setVisibility(View.VISIBLE);
}
else
{
holder.edited.setVisibility(View.GONE);
}
holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
if (longClick != null)
{
if (!longClick[position])
{
holder.markedMessage.setVisibility(View.VISIBLE);
longClick[position] = true;
clickedMessages++;
}
}
else
{
longClick = new boolean[chats.size()];
holder.markedMessage.setVisibility(View.VISIBLE);
longClick[position] = true;
clickedMessages++;
}
return true;
}
});
holder.itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (longClick != null)
{
if (!longClick[position])
{
holder.markedMessage.setVisibility(View.VISIBLE);
longClick[position] = true;
clickedMessages++;
}
else if (longClick[position])
{
holder.markedMessage.setVisibility(View.GONE);
longClick[position] = false;
clickedMessages--;
}
}
else
{
longClick = new boolean[chats.size()];
holder.markedMessage.setVisibility(View.VISIBLE);
longClick[position] = true;
clickedMessages++;
}
}
});
stringLenght = chat.getMessage().length();
new DecriptMessagesClass(chat.getMessage(), stringLenght, position, chats, holder);
}
@Override
public int getItemCount()
{
return chats.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
public TextView answered;
public TextView answeredFrom;
public TextView messageView;
public TextView username;
public ImageView markedMessage;
public RelativeLayout AnsweredBackground;
public TextView edited;
public ViewHolder(@NonNull View itemView)
{
super(itemView);
answered = itemView.findViewById(R.id.AnsweredMessage);
markedMessage = itemView.findViewById(R.id.marked_message);
messageView = itemView.findViewById(R.id.message_view);
answeredFrom = itemView.findViewById(R.id.answeredFrom);
AnsweredBackground = itemView.findViewById(R.id.AnsweredMessageBackground);
username = itemView.findViewById(R.id.message_sender_name);
edited = itemView.findViewById(R.id.edited);
messageRecycler = itemView.findViewById(R.id.messageView);
}
}
@Override
public int getItemViewType(int position)
{
user = FirebaseAuth.getInstance().getCurrentUser();
if (chats.get(position).getSender().equals(user.getUid()))
{
return MSG_TYPE_RIGHT;
}
else
{
return MSG_TYPE_LEFT;
}
}
}