1. 程式人生 > >RecyclerView巢狀GridView顯示不全,Item的複用的問題

RecyclerView巢狀GridView顯示不全,Item的複用的問題

1.巢狀GridView

  RecyclerView非常方便使用,每個Item可以巢狀不同的佈局,通過
public int getItemViewType(int position)
可以獲取到每個Item的佈局型別。想在其中的一個Item就是GridView控制元件。大家知道,多個含有滑動效果的控制元件巢狀在一起,很容易出現滑動衝突的問題。一般的解決辦法:把內層的控制元件佈局重新計算後再繪製出來。也就是把GridView需要顯示的內容全部顯示出來,而不用滑動事件。只需要自定義各一個GridView即可。

/**
 * Author: aaa
 * Date: 2017/1/16 17:15.
 */
public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int
expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }

佈局檔案

<MyGridView
     android:id="@+id/recyclerview_product"
        android:numColumns="2"
        android:layout_marginTop="7dp"
        android:horizontalSpacing
="10dp" android:verticalSpacing="10dip" android:layout_marginRight="12dp" android:layout_marginLeft="12dp" android:layout_width="match_parent" android:layout_height="wrap_content"/>

每行只顯示兩個Item,如果有四個專案,那麼就顯示兩行;如果有八個專案,就顯示四行。而且不如外部的RecyclerView的滑動相沖突。

2.RecyclerView複用

如果不想RecyclerView中的Item複用,而是每次都重新顯示,只需加上以下這句話:

itemViewHolder.setIsRecyclable(false);//false - 禁止複用 true-可以複用

可以解決RecyclerView由於複用而造成的顯示錯亂問題