2016-05-05 5 views
-1

Я создаю пользовательский вид на Android. Мне нужно использовать его как элементы в списке.CustomView внутри RecyclerView

Мой заказ вид:

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(); 
    } 

} 

проблема заключается в том, что повторялся содержимое пользовательского вида. для проверки я записываю в журнал случайное число, сгенерированное в пользовательском классе вида. При прокрутке списка число повторяется, даже если я прокручиваю вниз. Что мне нужно сделать, чтобы каждый элемент не повторял содержимое?

+0

Вы используете вид ресайклера и виды получают переработаны , Это задается как минимум 4 раза в день, см. Http://stackoverflow.com/q/36780828/1837367 или здесь также http://stackoverflow.com/q/36779656/1837367 –

ответ

0

С первого взгляда кажется, что вы создаете один 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()); 
    } 
+0

Я изменил код, но он все еще не за работой. он повторяет те же самые рандомы –

+0

Убедитесь, что позиция держателя установлена ​​в правильное положение. F.e имеет mPosition int как член класса в классе ChapterHolder. Убедитесь, что при привязке ViewHolder вы передаете позицию переменной держателя. F.E. holder.mPosition = положение; – daxgirl

+0

так, что мне делать с этой ссылкой? –

Смежные вопросы