[英]Items overlapping in Recycler View
用戶滾動時,我的回收器視圖中的項目重疊。 注意底部的重疊文本:
以下是生成此視圖的代碼:
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;
}
}
要重申這個問題, 我該如何防止圖像中出現重疊?
問題解決了:
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
類。 並沒有更多的重疊:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.