2015-11-18 106 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); 
}