5

我正在使用回收站視圖來顯示包含圖像網格佈局的項目列表。網格佈局動態添加到回收站視圖適配器上「onBindViewHolder」方法內的列表項。現在的問題是網格佈局視圖在每個滾動重新創建。我不希望這些視圖在滾動上重新創建。如何處理?回收站視圖中動態視圖的問題

這裏是代碼片段

@Override 
    public void onBindViewHolder(final PersonViewHolder personViewHolder, final int i) { 

       GridLayout feedGrid = new GridLayout(context); 
       LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dipToPixels(context,HomePage.SCREEN_WIDTH),dipToPixels(context,HomePage.SCREEN_WIDTH)); 
       feedGrid.setLayoutParams(layoutParams); 
       feedGrid.setColumnCount(1); 

       imgArr = new ImageView[num]; 
       imgArr[0] = new ImageView(context); 
       GridLayout.Spec row = GridLayout.spec(0, 1); 
       GridLayout.Spec colspan = GridLayout.spec(0, 1); 
       GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, colspan); 
       gridLayoutParam.setGravity(Gravity.FILL); 

        Picasso.with(context).load(urlArr.get(0)).error(mDrawable).placeholder(mDrawable).into(imgArr[0], new Callback() { 
         @Override 
         public void onSuccess() { 
          personViewHolder.feedGridLayout.setVisibility(View.VISIBLE); 
          personViewHolder.loadImg.setVisibility(View.GONE); 
         } 

         @Override 
         public void onError() { 
          personViewHolder.feedGridLayout.setVisibility(View.GONE); 
          personViewHolder.loadImg.setVisibility(View.VISIBLE); 

         } 

        }); 



       feedGrid.addView(imgArr[0], gridLayoutParam); 

       personViewHolder.feedGridLayout.removeAllViews(); 

       personViewHolder.feedGridLayout.addView(feedGrid); 

} 
+0

我可以知道爲什麼它被低估? – Manu

回答

0

這是我如何解決一個非常類似的problem

在您的適配器中,您重寫onViewRecycled並刪除gridLayout的視圖,而不是onBindViewHolder。

@Override 
    public void onViewRecycled(PersonViewHolder personViewHolder) { 
     super.onViewRecycled(personViewHolder); 
     personViewHolder.feedGridLayout.removeAllViews(); 
    } 

從您的onBindViewHolder中刪除personViewHolder.feedGridLayout.removeAllViews();

讓我知道如果修復它。

+0

這使得recyclerview凍結 –