RecyclerView巢狀GridView顯示不全,Item的複用的問題
阿新 • • 發佈:2019-01-23
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由於複用而造成的顯示錯亂問題