2016-07-06 16 views
5

Kaydırma yaparken genişleyen öğeler arasında boşluk bırakıyorumbenim RecyclerView'umu bitirdim, ancak test ederken, anlamadığım garip bir hata buldum. Etkinlik başlatıldığında, Recycler görünümündeki öğeler RecyclerView'da doğru mesafelerde iyi konumlandırılmıştır. Ancak, bir kez kaydırmaya başladığımda, bir kerede yalnızca bir öğe görünene kadar birbirlerinden ayrılırlar ve bir sonraki öğeyi görmeden önce ekranın distance almost equivalent numarasını kaydırmanız gerekir. Eğer Neymiş bir fikrin varsa recycleviewRecycler

enter image description here

kaydırma sonra etkinlik öğle

enter image description here

kaydırma önce

: Burada

hata neye benzediği Buna neden olmak, herhangi bir yardım büyük takdir edilecektir.

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); 
     } 
    }); 

Recycler adaptörü:

İşte
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); 
    } 
} 
} 

benim xml düzenini recycler görünümü endişe vericidir: öğe için

<!-- 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> 

düzeni İşte

faaliyetinden RecyclerView kodudur geri dönüşüm kapsamı içinde:

<?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

sizin recyclerView kodunu wrap_content hem genişlik ve yüksekliğini ayarlamak? –

+0

Geri dönüşümlü görünüm içinde öğeleri için Düzen sağlar ve geri dönüşüm için kod – Kushan

+0

@AhmadAlsanie Kodumu ekledim –

cevap

8

bir tahmin yapmak çözmesine ve değil sizin Düzeni ve RecyclerView kodunu sağlayın. Otomatik ölçümü: sürümü ile

LayoutManager API için heyecan verici yeni bir özellik vardır 2.3.0:

işte Ok

konudur! Bu, bir RecyclerView öğesinin içeriğinin boyutuna göre kendisini boyutlandırmasını sağlar. Bu, RecyclerView'ın bir boyutu için WRAP_CONTENT kullanımı gibi önceden mevcut olmayan senaryoların artık mümkün olduğu anlamına gelir. Artık tüm yerleşik LayoutManager'ların artık otomatik ölçümü desteklediğini göreceksiniz. Şimdi tam saygı edilecektir (örneğin kaydırma yönünde MATCH_PARENT gibi) önceden göz ardı düzen parametreleri:

Bu değişiklik nedeniyle, öğe görüş düzeni parametrelerini kontrol çift emin olun.

Temel olarak LinearLayout genişliği match_parent bir görüntü ve geriye kalan alan ile tüm ekranı sığdırmak için her öğeyi neden olan 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" /> 

kaldırmak gerekir.

Eğer LinearLayout kullanmakta ısrar ederse,

+0

var. Detaylı yanıt için çok teşekkürler, bana hem bir çözüm hem de bir açıklama verdin, ben de bunu takdir ediyorum. Umarım bu aynı hatayı tekrar yapmamı engeller, şerefe! –

+2

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

+0

teşekkürler @Ahmad Alsanie :) alıntı için kaynak eklemeyi unuttum:) – Kushan