【问题标题】:why images are duplicated (Picasso)为什么图像重复(毕加索)
【发布时间】:2016-10-26 00:52:26
【问题描述】:

在我的代码中,我正在使用 recycler 视图来显示一些数据。

滚动后图像总是乱七八糟。

这是我的一些代码。

public class LeaderBoardAdapter extends UltimateViewAdapter<RecyclerView.ViewHolder> {

    private List<Profile> mProfilesList;
    private BaseActivity mBaseActivity;

    public LeaderBoardAdapter(final BaseActivity pBaseActivity, final List<Profile> pProfilesList) {
        mProfilesList = pProfilesList;
        mBaseActivity = pBaseActivity;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder pHolder, final int position) {
        final ViewHolder holder = (ViewHolder) pHolder;

       holder.paginationTextView.setText(mProfilesList.get(position).getPosition() + ".");
        holder.nameTextView.setText(mProfilesList.get(position).getProfile().getName());

        if (!TextUtils.isEmpty(mProfilesList.get(position).getProfile().getImage())) {
            Picasso
                    .with(mBaseActivity)
                    .load(mProfilesList.get(position).getProfile().getImage())
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .into(holder.userImageView);
        } else {
            holder.userImageView.setBackgroundResource(R.drawable.img_edit_profile_button);
        }

        if (position == 0 || position == 1 || position == 2) {
            holder.layout.setBackgroundColor(mBaseActivity.getResources().getColor(R.color.white));
        } else {
            holder.layout.setBackgroundColor(mBaseActivity.getResources().getColor(R.color.white_transparent));
        }


    }

    @Override
    public int getAdapterItemCount() {
        return mProfilesList.size();
    }

    @Override
    public int getItemCount() {
        return mProfilesList.size();
    }

    @Override
    public RecyclerView.ViewHolder getViewHolder(View view) {
        return new UltimateRecyclerviewViewHolder(view);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.leaders_board_item, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public long generateHeaderId(int position) {
        return 0;
    }

    @Override
    public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup viewGroup) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.leaders_board_item, viewGroup, false);
        return new RecyclerView.ViewHolder(view) {
        };
    }

    @Override
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    }

    class ViewHolder extends UltimateRecyclerviewViewHolder {

        TextView paginationTextView;
        TextView nameTextView;
        TextView securityIndexValueTextView;
        CircularImageView userImageView;
        ImageView securityIndexImageView;
        LinearLayout layout;

        public ViewHolder(View itemView) {
            super(itemView);

            paginationTextView = (TextView) itemView.findViewById(R.id.leaders_board_item_pagination_text_view);
            nameTextView = (TextView) itemView.findViewById(R.id.leaders_board_item_name_text_view);
            securityIndexValueTextView = (TextView) itemView.findViewById(R.id.leaders_board_item_security_index_value_text_view);
            userImageView = (CircularImageView) itemView.findViewById(R.id.leaders_board_item_user_image_view);
            securityIndexImageView = (ImageView) itemView.findViewById(R.id.leaders_board_item_security_index_image_view);
            layout = (LinearLayout) itemView.findViewById(R.id.leaders_board_item_layout);
        }

    }
}

这里出了什么问题,谁能告诉我?

【问题讨论】:

    标签: android android-layout android-imageview picasso


    【解决方案1】:

    您没有考虑到查看器回收。你需要的是类似的东西

    if (!TextUtils.isEmpty(mProfilesList.get(position).getProfile().getImage())) {
        Picasso.with(mBaseActivity)
               .load(mProfilesList.get(position).getProfile().getImage())
               .placeholder(R.drawable.default_avatar)
               .error(R.drawable.default_avatar)
               .into(holder.userImageView);
    } else {
            // Cancel any pending requests to load an image into the imageview
            Picasso.with(mBaseActivity).cancelRequest(holder.userImageView);
            // Set the imageview to the default avatar
            holder.userImageView.setImageResource(R.drawable.default_avatar);
            holder.userImageView.setBackgroundResource(R.drawable.img_edit_profile_button);
    }        
    

    【讨论】:

      【解决方案2】:
      final ViewHolder holder = (ViewHolder) pHolder;
      

      这行让我觉得你的实现有问题。 你不应该需要它来投射它。

      请查看基本示例。

      另一个问题可能是毕加索会使用缓存机制。我记得应该有防止它的方法。

      如果您可以发布完整的适配器代码,我们可以检查更多

      祝你好运

      【讨论】:

      • 我正在使用ultimaterecylerview
      猜你喜欢
      • 1970-01-01
      • 2018-03-02
      • 2017-07-14
      • 2017-09-18
      • 2014-08-29
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      相关资源
      最近更新 更多