回收站视图中动态视图的问题

问题描述:

我正在使用回收站视图来显示包含图像网格布局的项目列表。网格布局动态添加到回收站视图适配器上“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

这是我如何解决一个非常类似的problem

在您的适配器中,您重写onViewRecycled并删除gridLayout的视图,而不是onBindViewHolder。

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

从您的onBindViewHolder中删除personViewHolder.feedGridLayout.removeAllViews();

让我知道如果修复它。

+0

这使得recyclerview冻结 –