2015-11-18 3 views
3

Я использую GridLayoutManager с recyclerview, когда я быстро enter image description here прокрутки вниз один элемент из четырех видимых элементов сетки (справа внизу) перемещается дальше,Recyclerview элементы быстрой прокрутки исчезают

Я использую этот учебник, чтобы осуществить быстрый прокрутки и быстрого прокрутки here

+0

Вы нашли решение для этого? У меня также есть предметы, которые исчезают, когда я бегу очень быстро. – Gil

ответ

3

Угадайте, я нашел решение.

Похоже, что когда вновь переработанные виды снова привязаны к окну, их состояние изменено на Невидимое (IDK почему). Все, что нам нужно сделать, это снова увидеть его.

К счастью, класс RecyclerView.Adapter имеет метод обработки, когда представление подключено или повторно подключено к RecyclerView.

@Override 
    public void onViewAttachedToWindow(ViewHolder holder){ 
     super.onViewAttachedToWindow(holder); 
     if(!holder.tv_1.getText().toString().contentEquals("#EMPTYVIEW")) 
      holder.root.setVisibility(View.VISIBLE); 

     Log.i("ATTACHED_VISIBILITY",holder.tv_1.getText().toString()+"\t"+holder.root.getVisibility()); 
    } 

Моего ViewHolder класс

class ViewHolder extends RecyclerView.ViewHolder{ 
    TextView tv_1; 
    TextView tv_2; 
    ImageView iv; 
    ImageButton bt; 

    View root; 

    ViewHolder(View v){ 
     super(v); 

     //setIsRecyclable(false);  //to prevent views from getting deleted. :-(

     tv_1=(TextView)v.findViewById(R.id.aral_tv_title); 
     tv_2=(TextView)v.findViewById(R.id.aral_tv_stitle); 
     iv=(ImageView)v.findViewById(R.id.aral_iv); 
     bt=(ImageButton)v.findViewById(R.id.aral_bt_more); 

     tv_1.setTypeface(WorkActivity.mainTF); 
     tv_2.setTypeface(WorkActivity.mainTF); 

     root=v; 
    } 
} 

Надеется, что это помогает вам.

1

За каждые if должно быть else.

Например: Если у вас есть вид, который виден в файле XML по умолчанию, но вы изменяете его видимость в коде, вы должны поставить else иначе RecyclerView будет повторно использовать представление и покажет повторно использованы просмотры с разными данными.

if(somethingIsTrue) { 
view.setVisibility(View.GONE); 
} else { 
view.setVisibility(View.VISIBLE); 
}