在Recycler View中重叠的项目

时间:2015-10-23 17:24:45

标签: android android-recyclerview recycler-adapter

用户滚动时,我的回收站视图中的项目重叠。请注意底部的重叠文本:

enter image description here

以下是生成此视图的代码:

        ArrayList<Bitmap> drawables = mBitmaps;
        RecyclerView recyclerView = new RecyclerView(ctx);
        LinearLayoutManager llm = new LinearLayoutManager(ctx);
        recyclerView.setLayoutManager(llm);
        RecyclerView.Adapter adapter = new MyRecyclerAdapter(contentList, uriList, drawables);
        recyclerView.setAdapter(adapter);
        ((ViewGroup) rootView).addView(recyclerView);
  • mBitmaps是一组图片
  • contentList是一个字符串列表
  • uriList是另一个字符串列表

以下是MyRecyclerAdapter类的代码:

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {

    ArrayList<String> mContentList, mUriList;
    ArrayList<Bitmap> mBitmaps;
    MyRecyclerAdapter(ArrayList<String> contentList, ArrayList<String> uriList, ArrayList<Bitmap> drawables){
        mContentList = contentList;
        mUriList = uriList;
        mBitmaps = drawables;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final Context ctx = parent.getContext();
        CardView.LayoutParams params = new CardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        CardView cardView = new CardView(ctx);
        cardView.setLayoutParams(params);

        // set edges round for the cardView
        int radius = 14;
        final float scale = ctx.getResources().getDisplayMetrics().density;
        int pixels = (int) (radius * scale + 0.5f);
        cardView.setRadius(pixels);

        MyViewHolder holder = new MyViewHolder(cardView);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Context ctx = holder.itemView.getContext();
        View view = getViewForCard(ctx, position);      // getView for the card
        holder.viewGroup.addView(view);
    }

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

    public View getViewForCard(Context context, int pos){

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        Context ctx = context;
        LinearLayout ll = new LinearLayout(ctx);
        ll.setLayoutParams(params);
        ll.setOrientation(LinearLayout.VERTICAL);

        TextView tv = new TextView(ctx);
        tv.setText(mUriList.get(pos));
        TextView tv1 = new TextView(ctx);
        tv1.setText(mContentList.get(pos));

        // create an image view and add bitmap to it.
        ImageView imageView = new ImageView(ctx);
        imageView.setLayoutParams(params);
        imageView.getLayoutParams().height = 500;
        imageView.getLayoutParams().width = 500;
        imageView.setImageBitmap(mBitmaps.get(pos));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        ll.addView(imageView);       
        ll.addView(tv);                 ll.addView(tv1);

        return ll;
    }

}

这是我的ViewHolder课程:

public class MyViewHolder extends RecyclerView.ViewHolder {
    ViewGroup viewGroup;

    MyViewHolder(View view){
        super(view);
        viewGroup = (ViewGroup)itemView;
    }
}

要重申此问题,如何防止图片中出现重叠?

1 个答案:

答案 0 :(得分:2)

解决问题:

 public void onBindViewHolder(MyViewHolder holder, int position) {
    Context ctx = holder.itemView.getContext();
    View view = getViewForCard(ctx, position);      // getView for the card

    holder.viewGroup.removeAllViews();     // **The problem solved here**

    holder.viewGroup.addView(view);
}

我从holder.viewGroup课程中的onBindViewHolder()方法中移除了MyRecyclerAdapter中的所有观看次数。而且没有更多重叠:)。