2016-07-06 74 views
5

Ho appena terminato il mio RecyclerView per il mio Android Application, ma durante il test, ho trovato uno strano bug che non capisco. Quando l'attività viene avviata, gli elementi nella vista Recycler sono posizionati correttamente su RecyclerView alle distanze corrette. Tuttavia, una volta iniziato lo scorrimento si allontanano l'uno dall'altro fino a quando solo un elemento è visibile in una sola volta, e devi scorrere uno distance almost equivalent a quello dello schermo prima di vedere l'elemento successivo.RecyclerVisualizza lo spazio tra gli elementi che si espandono durante lo scorrimento

Ecco ciò che il bug si presenta come:

prima di scorrere sull'attività pranzo

enter image description here

Dopo lo scorrimento del recycleview

enter image description here

Se avete qualche idea di cosa potrebbe causando questo, ogni aiuto sarebbe molto apprezzato.

ecco il codice RecyclerView dall'attività:

private ArrayList<String> imagesUrlListThumb, imagesUrlListFull = new ArrayList<String>(); 
private RecyclerAdapter recyclerAdapter; 
private String urlRecyclerThumb = ""; 
private RecyclerView recyclerView; 
private ImageView imgCurRecyclerView; 

    imagesUrlListThumb = produit.getImgUrlThumbMul(); 
    recyclerAdapter = new RecyclerAdapter(getApplicationContext(), imagesUrlListThumb); 
    recyclerView = (RecyclerView) findViewById(R.id.content_product_detail_recycer_view); 
    RecyclerView.LayoutManager recyclerLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false); 
    recyclerView.setLayoutManager(recyclerLayoutManager); 
    recyclerView.setAdapter(recyclerAdapter); 
    urlRecyclerThumb = imagesUrlListThumb.get(0); 
    RecyclerItemClickSupport.addTo(recyclerView).setOnItemClickListener(new RecyclerItemClickSupport.OnItemClickListener() { 
     @Override 
     public void onItemClicked(RecyclerView rv, int pos, View view) { 
      urlRecyclerThumb = imagesUrlListThumb.get(pos); 
      Picasso.with(getApplicationContext()).load(urlRecyclerThumb).fit().into(imgCurRecyclerView); 
     } 
    }); 

adattatore Recycler:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>{ 

private List<String> urlThumbImg; 
private Context context; 

public RecyclerAdapter(Context ctx, List<String> urls){ 
    this.urlThumbImg = urls; 
    this.context = ctx; 
} 

@Override 
public RecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_slideshow, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(RecyclerAdapter.MyViewHolder holder, int position){ 
    String current = urlThumbImg.get(position); 
    Picasso.with(context).load(current).fit().into(holder.myImgView); 
} 

@Override 
public int getItemCount(){ 
    return urlThumbImg.size(); 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public ImageView myImgView; 

    public MyViewHolder(View view){ 
     super(view); 
     myImgView = (ImageView) view.findViewById(R.id.imageView_slide); 
    } 
} 
} 

Qui è il mio layout xml per quanto riguarda la vista riciclatore:

<!-- RECYCLER VIEW --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="15dp" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/content_product_detail_recycer_view_cur_image" 
      android:layout_width="150dp" 
      android:layout_height="130dp" 
      android:layout_gravity="center" 
      android:background="@android:color/black" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/content_product_detail_recycer_view" 
      android:layout_width="wrap_content" 
      android:layout_height="60dp" 
      android:layout_gravity="center" 
      android:layout_margin="5dp" 
      android:background="@android:color/darker_gray"> 

     </android.support.v7.widget.RecyclerView> 

    </LinearLayout> 

layout per voce reciclerview:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/imageView_slide" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_margin="5dp" 
    android:background="@android:color/darker_gray" /> 

+2

il codice recyclerView? –

+0

fornire layout per gli elementi all'interno di recyclerview e codice per recyclerview – Kushan

+0

@AhmadAlsanie Ho aggiunto il codice alla mia domanda –

risposta

8

fornire il proprio layout e il codice RecyclerView per aiutare il debug e non fare una congettura.

Ok ecco il problema:

Con il rilascio 2.3.0 v'è una grande novità per l'API LayoutManager: auto-misurazione! Ciò consente a RecyclerView di dimensionarsi in base alla dimensione del suo contenuto. Ciò significa che ora sono possibili scenari precedentemente non disponibili, come l'utilizzo di WRAP_CONTENT per una dimensione di RecyclerView. Tutti i LayoutManager integrati ora supportano la misurazione automatica.

A causa di questo cambiamento, assicurarsi di ricontrollare i parametri di layout dei vostri punti di vista voce: parametri di layout precedentemente ignorati (come MATCH_PARENT nella direzione di scorrimento) sarà ora pienamente rispettati.

In sostanza è necessario rimuovere il LinearLayout

<ImageView 
android:id="@+id/imageView_slide" 
android:layout_width="60dp" 
android:layout_height="60dp" 
android:layout_margin="5dp" 
android:background="@android:color/darker_gray" /> 

Il match_parent della larghezza LinearLayout sta causando ogni elemento per adattarsi allo schermo intero con una sola immagine e lo spazio rimanente.

Se ti ostini a usare il LinearLayout, impostare sia la larghezza e l'altezza di wrap_content

+0

Grazie mille per la risposta dettagliata, mi hai dato sia una soluzione che una spiegazione, quindi lo apprezzo. Spero che questo mi impedisca di ripetere lo stesso errore, grazie! –

+2

src: http://stackoverflow.com/questions/35728179/recyclerview-items-with-big-empty-space-after-23-2-0 –

+0

grazie a @Ahmad Alsanie :) ho dimenticato di aggiungere la fonte per il preventivo:) – Kushan