5

Uso la vista del riciclatore per mostrare l'elenco di elementi che contengono il layout di griglia delle immagini. Il layout della griglia viene aggiunto dinamicamente alla voce dell'elenco all'interno del metodo "onBindViewHolder" sull'adattatore di visualizzazione recycler. Ora il problema è che le viste del layout della griglia sono ricreate su ogni scroll. Non voglio che quelle viste vengano ricreate su scroll. Come affrontarlo ??Problemi con viste dinamiche all'interno del punto di vista del riciclatore

Ecco il frammento di codice

@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

Posso sapere perché è downvoted ??? – Manu

risposta

0

Ecco come ho risolto un molto simile problem.

Nell'adattatore si esegue l'override suViewRecycled e si rimuovono le viste della griglia. Là fuori invece di onBindViewHolder.

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

Rimuovere personViewHolder.feedGridLayout.removeAllViews(); dal onBindViewHolder.

Fammi sapere se questo lo risolve.

+0

fa congelare il recyclerview –

Problemi correlati