簡體   English   中英

RecyclerView 中的 CustomView

[英]CustomView inside RecyclerView

我在 Android 上創建自定義視圖。 我需要將它用作列表視圖的項目。

我的自定義視圖:

public class CustomView extends View{
int random;

//4 constructors;

public int getRandom() {
    return random;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(w, h);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(b, 0,0,new Paint());
    drawLetters(new Canvas(b));
}

private void init(){
    drawingUtil = DrawingUtil.getInstance(getContext());
    random = new Random().nextInt();
}

}

適配器:

public class ListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    List<String> chapter = new ArrayList<>();
    Context context;
    LayoutInflater inflater;

    public ListAdapter(List<String> chapter, Context context) {
        this.chapter = chapter;
        this.context = context;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = inflater.inflate(R.layout.item, null);
        return new ChapterHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((ChapterHolder) holder).setVerse(chapter.get(position), position);
        Log.d(Constants.LOG_TAG, getClass().getSimpleName() + ": random " + ((ChapterHolder) holder).getRandom());
    }

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

}

問題是自定義視圖的內容重復了。 為了測試,我在日志中寫入了一個在自定義視圖類中生成的隨機數。 滾動列表時,該數字會重復,即使我只向下滾動。 我需要做什么才能使每個元素不重復內容?

乍一看,您似乎正在創建一個 ViewHolder(ChapterHolder),但您正在綁定另一個(RecyclerView.ViewHolder)。 在您的適配器聲明中,它應該是:

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ChapterHolder>

然后你的 onBindViewHolder 實際上將綁定正確的持有人......並且看起來像這樣:

    public void onBindViewHolder(ChapterHolder holder, int position) {
        holder.setVerse(chapter.get(position), position);
        Log.d(Constants.LOG_TAG, getClass().getSimpleName() + ": random " + 
        holder.getRandom());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM