2015-07-22 55 views
1

我有一個包含多個其他視圖的ScrollView,我希望其中一個視圖是具有相同佈局的其他視圖(例如ImageView)的網格。在ScrollView中的不可滾動的網格視圖中回收視圖

由於不推薦在另一個可滾動視圖中,我希望這個網格視圖不可滾動,否則我會使用GridView或RecyclerView。

當然,我可以將網格視圖放置在其中一個標準佈局(例如TableLayout)內,但是當存在很多網格項時,這可能會導致內存問題。 有沒有任何標準的方法或庫允許回收ScrollView內的非滾動視圖的視圖?

+0

如果該回收視圖是滾動視圖的一部分,則回收視圖滾動將不起作用。所以最好在滾動視圖外使用循環視圖。 –

+0

你可以發佈你的代碼 – Sushrita

回答

2

如果您試圖強制GridViewRecyclerView爲不可滾動(所以基本上,您將不得不強制顯示所有元素的視圖的尺寸),您將最終在相同的情況下,如果您使用TableLayout(所以你需要注意內存問題)。

如果您禁用可滾動(回收)元素(例如GridView/RecyclerView)的滾動,則禁用使這些事情有效工作的最重要部分(這會使這些事情重用其視圖)。

你應該幫助您解決問題的方法是實現你的ScrollView作爲RecyclerView的一部分其他Views。你的RecyclerView應該配備adapter,可以充氣多種類型的Views(你可以閱讀它,例如here)。

+0

這是一個有趣的想法,理論上它幾乎解決了我的問題。 仍然存在的問題是,此特殊視圖應該可視化爲網格,而其他視圖的寬度= match_parent。 所以我想回收者視圖的自定義佈局管理器需要支持這一點。你知道有沒有可用的地方? – HaimS

+0

比您想象的要容易。只需要定期使用'GridLayoutManager',在構造函數中將列計數(屏幕的「網格部分」)作爲'spanCount'傳遞。然後使用'GridLayoutManager'的setSpanSizeLookup'方法來指定你希望它作爲一個'LinearLayoutManager'的適配器的位置('setSpanSizeLookup'應該返回'1'),並且你希望它的位置是grid( 'setSpanSizeLookup'應該返回前面提到的列數)。 –

+2

哦,哇,我不知道GridLayoutManager提供了這個功能。也許它不應該被稱爲網格給予此功能......無論如何,非常感謝您的幫助! – HaimS

0

由於您使用RecyclerView你可以使用NestedScrollView代替ScrollView他們應該打得更漂亮,因爲RecyclerViewNestedScrollingChild延伸,並從NestedScrollView延伸NestedScrollingParent

您可以使用其他的觀點是VerticalGridViewHorizontalGridView但正如你說你是擔心性能問題,你可以提供一個GridLayoutManagerRecyclerView我要堅持這一點。

相關問題