2016-07-06 58 views
5

我剛完成我的RecyclerView爲我的Android Application,但是當測試它時,我發現了一個奇怪的錯誤,我不明白。當活動啓動時,Recycler視圖中的項目在正確的距離上位於RecyclerView的位置。但是,一旦我開始滾動,它們將彼此分開,直到一次只能看到一個項目,並且在看到下一個項目之前必須將distance almost equivalent滾動到屏幕的那個位置。RecyclerView滾動時項目之間的空間擴大

這裏是錯誤的樣子:

上的活動午餐

enter image description here

滾動滾動recycleview

enter image description here

後之前如果您有任何想法可能造成這種情況,任何幫助將不勝感激。

下面是該活動的RecyclerView代碼:

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

回收站適配器:

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

這是關於我的XML佈局回收站視圖:

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

佈局項目回收站內:

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

你recyclerView代碼? –

+0

爲recyclerview內的商品和recyclerview的代碼提供佈局 – Kushan

+0

@AhmadAlsanie我已將代碼添加到我的問題 –

回答

8

提供您的佈局和RecyclerView代碼,以幫助調試和無法做出猜測。

好了,所以這裏的問題:

隨着發佈2.3.0有一個令人興奮的新功能的佈局管理API:自動測量! 這允許RecyclerView根據其內容的大小自行調整大小。這意味着以前不可用的場景,例如對RecyclerView的維度使用WRAP_CONTENT,現在是可能的。 您會發現所有內置的LayoutManagers現在都支持自動測量。

由於這種變化,一定要仔細檢查你的項目視圖的佈局參數:以前被忽視的佈局參數(如MATCH_PARENT在滾動方向)現在將得到充分的尊重。

基本上你需要刪除的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" /> 

在的LinearLayout寬度match_parent引起的每個項目與一個圖像和剩餘的空間,以適應整個屏幕。

如果你堅持使用的LinearLayout,同時設置寬度和高度爲wrap_content

+0

非常感謝你的詳細回覆,你給了我一個解決方案和解釋,所以我很欣賞這一點。希望這也能防止我再次犯同樣的錯誤,歡呼! –

+2

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

+0

謝謝@Ahmad Alsanie :)忘記添加引用來源: ) – Kushan

相關問題