1. 程式人生 > >ScrollView巢狀Listview/RecyclerView內容顯示不全

ScrollView巢狀Listview/RecyclerView內容顯示不全

1.起因

最近一個專案中,有一個需求是要在ScrollView中巢狀好幾個RecyclerView。然後問題來了,五個RecyclerView(PS:設計太奇葩)中的第二個RecyclerView總是只顯示一行資料。這個問題和以前ScrollView巢狀ListView很像,估計是一樣的問題。

2.原因

在ScrollView中巢狀巢狀ListView空間,無法正確的計算ListView的大小。但是這裡有一點沒想明白的是,我嵌套了幾個RecyclerView,只有第二個RecyclerView會出現只顯示一條資料的情況,其他幾個RecyclerView都能正常執行。

3.解決辦法

重寫RecyclerView的onMeasure方法

 @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
        super.onMeasure(widthSpec, expandSpec);
    }

首先是Integer.MAX_VALUE,32位數,結構如下:
這裡寫圖片描述
Integer.MAX_VALUE的前兩位儲存的是測量模式,後面的資料才是大小值,也就是2147483647,基本就是無限大小。
然後是測量模式:

MeasureSpec.EXACTLY:精確模式,當設定了寬/高為50dp這種指定值或者為match_parent/fill_parent時就是這種模式。父元素確定了子元素的大小。

MeasureSpec.AT_MOST:最大(至多)模式,在這裡設定為了Integer.MAX_VALUE>>2=2147483647,也就是最大不超過這個值,可以小於。

MeasureSpec.UNSPECIFIED:未指定模式,可以得到任意想要的大小。

總結:重寫Listview/RecyclerView的onMeasure方法,通過最大測量模式得到值為Integer.MAX_VALUE>>2的值,將該值設為Listview/RecyclerView的高度,因為這個數值很大,因此可以直接將Listview/RecyclerView的內容全部顯示完。

缺點:使用這種方式雖然解決了問題,但是當Listview/RecyclerView的資料量很大的時候,會導致資料一次載入完,失去了Listview/RecyclerView複用的優勢。

相關推薦

ScrollViewListview/RecyclerView內容顯示

1.起因 最近一個專案中,有一個需求是要在ScrollView中巢狀好幾個RecyclerView。然後問題來了,五個RecyclerView(PS:設計太奇葩)中的第二個RecyclerView總是只顯示一行資料。這個問題和以前ScrollView巢狀Lis

ScrollViewListView導致item顯示的原因

一句話總結: ScrollView重寫了它的父類FrameLayout的measureChild和measureChildWithMargins方法,使傳入子類的HeightMeasureSpec的模式為UNSPECIFIED,導致listview計算高度時跳

ScoreViewListview或GradView顯示問題解決

public class ListviewUtil { public static void setListViewHeightBasedOnChildren(ListView listView) { // 獲取ListView對應的Adapter

簡單解決RecyclerViewRecyclerView條目顯示和寬度能鋪滿

第一個RecyclerView的Adapter @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewT

使用divider解決RecyclerView內容顯示的問題

使用第三方自定義IdeaScrollView包裹一個LinearLayout,LinearLayout中包裹RecyclerView和divider,divider寬度固定取到RecyclerView的內容顯示完整為止 <com.test.view.IdeaScrollView an

解決ScrollviewRecyclerview,Gridview等出現內容顯示等為

在自定義View和ViewGroup的時候,我們經常會遇到int型的MeasureSpec來表示一個元件的大小,這個變數裡面不僅有元件的尺寸大小,還有大小的模式。 這個大小的模式,有點難以理解。在系統中元件的大小模式有三種: 1.精確模式(MeasureSpec.EXAC

ScrollViewListView顯示和位置是頂部的解決辦法

(1)首先寫一個listview的頁面,用ScrollView進行巢狀,注意ScrollView裡面只能有一個佈局屬性,多個可以用Linearout進行包含 <?xml version="1.0" encoding="utf-8"?> <RelativeL

ScrollviewlistView資料顯示正常問題

ScrollView 巢狀listview 資料顯示不全的問題解決方案:    提供一種比較中意的解決方案,不需要自己去測量高度,省了很多事。具體方案如下: 定義一個自己的listView,重寫屢試不爽。如果即使重寫之後還不能顯示完全,在加上一句 scrollView.sc

解決ScrollViewListView顯示完全和滑動衝突的問題

</pre>在開發中我們往往會遇到這樣奇葩的需求,讓一個ScrollView巢狀ListView,那麼我們就會遇到這樣一個問題,就是listView 顯示不完全和滾動衝突的問題。下面就來解決一下這個問題</p><p></p>&

ScrollViewListView內容居中顯示

前段時間寫了一個ScrollView巢狀ListView,ListView通過重寫onMeasure方法設定了自適應ScrollView的高度,但是ScrollView裡邊的內容不是從開始位置顯示,如下圖: 在網上狠狠地搜尋了一番,有說用scrollView.smoothScro

ScrollViewRecyclerViewScrollViewListviewScrollView各種佈局,預設在頂部和回到頂部的解決方法;

如果:ScrollView.scrollTo(0,0);ScrollView.fullScroll(View.FOCUS_UP) ;ScrollView.smoothScrollTo(0, 0);這三種方法都解決不了你的問題,那麼請往下看;佈局有點複雜:最外層是SwipeRe

真正解決ScrollViewRecyclerView顯示及滑動問題

很多人都會遇到ScrollView巢狀RecyclerView巢狀的問題,各種巢狀模式,這種巢狀會出現以下幾種問題: 1、ScrollView和RecyclerView兩者都會滑動,而且有時候,滑動會衝突 2、RecyclerView顯示不全

Android4.x中ScrollViewListView,ListView能完全顯示總結、解決辦法

當ScrollView巢狀ListView時,使用listview設定setAdpter後,需要重新設定listview控制元件的寬高。在網上嘗試了一些方法,重新設定高度之後,仍然不能完全顯示,經過除錯,使用下面的方法,可以使ListView完全顯示。在setAdapter

解決ScrollViewListView滑動,只顯示一條,ListView滑到頂部問題

問題:在ScrollView中巢狀ListView,出現的效果是ListView只顯示一行,無論高度設定的是match_parent還是wrap_content。五種任你選。 1、設定ListView的高度為固定值 這樣ListView可以滑動,整體Sc

關於ScrollviewRecyclerView高度顯示

前言 做 Android開發我們經常會遇到這種ScrollView巢狀Listview或者 巢狀RecyclerView的需求,當我們搜尋解決方案時經常會遇到這句話 you should never put a scrollable view insid

解決ScrollViewListView或GridView置頂顯示問題

今天無意間發現一個小小的問題,當我們使用ScrollView裡面巢狀ListView或GridView的時候頁面顯示會停留在ListView的item當前,而不是置頂顯示整個頁面,不要慌,解決辦法來了。 1.在java程式碼中ListView或GridView初始化後面新增以下程式碼: sc

RecyclerViewRecyclerView item 顯示及資料顯示問題

今天在做專案中的商品屬性選擇彈框,用RecyclerView巢狀RecyclerView來實現,發現子RecyclerView item資料不顯示並且item數不全,如圖: 查了網上的解決方案。改為 父RecyclerView繫結佈局方式: return new AttributesV

從原始碼角度解析 - ScrollViewListView顯示一行的問題

<ScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent">

scrollviewlistview進頁面在頂部

scrollview和listview衝突導致進頁面就不是在頂部的問題 解決方案1:ScrollView.post() sv_container.post( new Runnable() { public void run() {

ScrollViewListViewRecyclerView,使其高度自適應

1、針對ScrollView巢狀ListView時只顯示第一個item高度的bug,可在activity裡動態修改ListView的高度(即計算每個item和分割線的高度後進行相加得到總高度),在setAdapter之後呼叫下面這個函式即可。 值得注意的是,此時ListVi