7

標題很清楚。我在這個佈局:ListView在API上嵌套滾動<21

_________________ 
|_______________| <- Toolbar  
|___|___|___|___| <- Tablayout 
|    | 
|    | 
| ViewPager | 
|    | 
|_______________| 

兩個工具欄和tablayout是一個AppBarLayout裏面,這樣我就可以使用滾動標誌隱藏在向頂部滾動工具欄。問題是這隻適用於嵌套滾動支持的視圖。大部分選項卡 - 我的意思是大多數頁面 - 都是support.v4.NestedScrollView s,所以這是可以的;其他人(並且需要)ListView s。

從棒棒糖開始,我可以簡單地將android:nestedScrollingEnabled="true"添加到列表視圖中,並且工具欄在滾動中隱藏正確。

在API < 21上,雖然沒有這樣的屬性,工具欄也沒有隱藏。更重要的是,由於CoordinatorLayout中的一些測量錯誤,列表中最後的項目被隱藏:listview的行爲就好像它有當前由工具欄佔用的空間。

解決方案:

  • 切換到RecyclerView,它不支持嵌套滾動:我不能,因爲我需要使用僅與適配器看法,他認爲我不能工作的外部庫適配器替換(即ParseQueryAdapter);

  • 延伸ListView並實現嵌套滾動:看起來很複雜;

  • 延伸ListView並實施一些解決方法,如測量內容以避免最後一項問題或(和)使工具欄隱藏的自定義行爲:似乎也很複雜;

  • 使用一些佈局技巧:找不到。

任何幫助?

例如,I(拼命)嘗試:

<android.support.v4.widget.NestedScrollView 
    android:nestedScrollingEnabled="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </ListView> 

</android.support.v4.widget.NestedScrollView> 

但這種方式ListView不佈置爲match_parent。我得到一個小高度的小視圖,頁面的其餘部分是空的。

回答

2

不幸的是,有沒有辦法讓嵌套的滾動工作ListView - 否則它不會要求在API 21

被做了修改,你會注意到,目前Parse SDK實際上已經刪除ParseQueryAdapter完全。鑑於此,使用Parse query APIs directly開始構建基於RecyclerView的適配器可能有意義。

+0

我不是在最後一個版本,但我記得那個類沒有被列入公共API的很長時間。然而,謝謝你,「你不能」 - 我花了幾個小時處理NestedScrolling接口。 – natario

+0

「在ListView上無法獲得嵌套滾動工作」。有ViewCompat.setNestedScrollingEnabled(ListView,boolean); – Dogcat

+1

@Dogcat - 它在API 21之前什麼都不做。它只是讓你不必檢查API級別。 – ianhanniballake