Android RecyclerView复制了一些UI组件

Android RecyclerView复制了一些UI组件,android,listview,android-recyclerview,Android,Listview,Android Recyclerview,我正试图在我的应用程序中实现一个RecyclerView,但是当我滚动时,我的RecyclerView中的一些UI组件不断重复它们自己。这可能是缓存的问题,但我还没有为UI元素的缓存实现任何逻辑。我也在使用毕加索图书馆 这是我的密码: public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { private List<CardViewBean> mListItemsCard;

我正试图在我的应用程序中实现一个
RecyclerView
,但是当我滚动时,我的
RecyclerView
中的一些UI组件不断重复它们自己。这可能是缓存的问题,但我还没有为UI元素的缓存实现任何逻辑。我也在使用毕加索图书馆

这是我的密码:

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
    private List<CardViewBean> mListItemsCard;
    Activity mActivity;
    CardViewBean itemCardView;
    ChatMessageDTO chatMessageDTO;
    List<EventGalleryDTO> eventGalleryDTOs;
    private static final String PICASSO_CACHE = "picasso-cache";

    public Adapter(Activity activity, List<CardViewBean> listItemsCard) {
        mListItemsCard = listItemsCard;
        this.mActivity = activity;
    }

    @Override
    public Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(mActivity, LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_adapter, parent, false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mActivity);
        itemCardView = mListItemsCard.get(position);
        holder.txtEventName.setText(itemCardView.getEventName());
        if (itemCardView.getMessageCount() > 0) {
            holder.txtChat.setText("(" + itemCardView.getMessageCount() + ")");
        }
        if (itemCardView.getImageCount() > 0) {
            holder.txtGallery.setText(String.valueOf(itemCardView.getImageCount()));
        }
        chatMessageDTO = getChatMsgDTO();
        String imagePath = mListItemsCard.get(position).getImagePath();

        if (StringUtils.isNotBlank(imagePath)) {
            File file = new File(imagePath);
            if (file.exists()) {
                setCreatorImage(file, holder);
            } else {
                holder.ivEventImage.setImageResource(R.drawable.placeholder);
            }
        }

        if (chatMessageDTO != null) {
            if (StringUtils.isNotBlank(chatMessageDTO.getMessage())) {
                holder.txtLastMessage.setText(chatMessageDTO.getMessage());
            }

            String time = "";
            if (StringUtils.isNotBlank(chatMessageDTO.getDateTime())) {
                String dateArr[] = chatMessageDTO.getDateTime().split(" ");
                if (dateArr.length > 1) {
                    if (dateArr[1].contains(":")) {
                        time = dateArr[1].substring(0, dateArr[1].lastIndexOf(":"));
                    } else {
                        time = dateArr[1];
                    }
                    holder.txtLastMessageTime.setText(time);
                }
            }
        }
    }

    @Override
    public int getItemCount() {
        return mListItemsCard.size();
    }
}
公共类适配器扩展了RecyclerView.Adapter{
私人名单;
活动能力;
CardViewBean项目CardView;
ChatMessageDTO ChatMessageDTO;
列出EventGalleryDTO;
私有静态最终字符串PICASSO_CACHE=“PICASSO CACHE”;
公共适配器(活动,列表项SCARD){
mListItemsCard=listItemsCard;
这个。活动=活动;
}
@凌驾
public Adapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的ViewHolder(mActivity,LayoutInflater.from(parent.getContext())。充气(R.layout.layout_适配器,parent,false));
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
SharedReferences pref=PreferenceManager.GetDefaultSharedReferences(MacActivity);
itemCardView=mListItemsCard.get(位置);
holder.txtEventName.setText(itemCardView.getEventName());
如果(itemCardView.getMessageCount()>0){
holder.txtChat.setText(“(“+itemCardView.getMessageCount()+”);
}
如果(itemCardView.getImageCount()>0){
holder.txtGallery.setText(String.valueOf(itemCardView.getImageCount());
}
chatMessageDTO=getChatMsgDTO();
字符串imagePath=mListItemsCard.get(位置).getImagePath();
if(StringUtils.isNotBlank(imagePath)){
文件文件=新文件(imagePath);
if(file.exists()){
setCreatorImage(文件、持有者);
}否则{
holder.ivEventImage.setImageResource(R.drawable.placeholder);
}
}
if(chatMessageDTO!=null){
if(StringUtils.isNotBlank(chatMessageDTO.getMessage()){
holder.txtLastMessage.setText(chatMessageDTO.getMessage());
}
字符串时间=”;
if(StringUtils.isNotBlank(chatMessageDTO.getDateTime())){
字符串dateArr[]=chatMessageDTO.getDateTime().split(“”);
如果(dateArr.length>1){
如果(dateArr[1]。包含(“:”){
time=dateArr[1]。子字符串(0,dateArr[1]。lastIndexOf(“:”);
}否则{
时间=dateArr[1];
}
holder.txtLastMessageTime.setText(时间);
}
}
}
}
@凌驾
public int getItemCount(){
返回mListItemsCard.size();
}
}
试试这个(添加一个else语句):

尝试以下操作(添加else语句):


它在某种程度上起了作用,但SetGalleryImage中的图像仍在重复。此外,我得到了一个异常java.lang.illegalStateException:指定的子级已经有了父级。您必须对子级的父级调用removeView()。它在某种程度上起作用,但SetGalleryImage中的图像仍在重复。此外,我收到一个异常java.lang.illegalStateException:指定的子级已具有父级。必须对子级的父级调用removeView()。
if (itemCardView.getMessageCount() > 0) {
    holder.txtChat.setText("(" + itemCardView.getMessageCount() + ")");
}

else {
    holder.txtChat.setText("")

}

if (itemCardView.getImageCount() > 0) {
    holder.txtGallery.setText(String.valueOf(itemCardView.getImageCount()));
}
else {
    holder.txtGallery.setText("")
}