android - API<21 上的 ListView 嵌套滚动

标签 android android-listview android-support-library android-design-library android-appbarlayout

标题清晰。我有这个布局:

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

工具栏和 tablayout 都在 AppBarLayout 中,因此我可以使用滚动标志在向顶部滚动时隐藏工具栏。问题是这只适用于嵌套滚动支持的 View 。大多数选项卡 - 我的意思是,大多数页面 - 都是 support.v4.NestedScrollView,所以没关系;其他是(并且需要是)ListView

从 Lollipop 开始,我只需将 android:nestedScrollingEnabled="true" 添加到 ListView ,工具栏就会在滚动时正确隐藏。

不过,在 API<21 上,没有这样的属性,工具栏也不会隐藏。更重要的是,列表中的最后一项被隐藏了,因为 CoordinatorLayout 中的一些测量错误:listview 就像它具有当前被工具栏占用的空间一样。

解决方案:

  • 切换到 RecyclerView,它支持嵌套滚动:我不能,因为我需要使用仅适用于适配器 View 的外部库适配器,而我不能替换(即 ParseQueryAdapter);

  • 扩展 ListView 并实现嵌套滚动:看起来很复杂;

  • 扩展 ListView 并实现一些解决方法,例如测量内容以避免最后一项问题或(和)使工具栏隐藏的自定义行为:看起来也很复杂;

  • 使用一些布局技巧:没有找到。

有什么帮助吗?

例如,我(绝望地)尝试过:

<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。我得到了一个小高度的小 View ,页面的其余部分是空的。

最佳答案

不幸的是,没有办法让嵌套滚动在 ListView 上工作 - 否则它不需要在 API 21 中完成的修改。

您会注意到当前的 Parse SDK实际上已经完全删除了 ParseQueryAdapter。鉴于此,使用 Parse query APIs directly 开始构建您自己的基于 RecyclerView 的适配器可能是有意义的.

关于android - API<21 上的 ListView 嵌套滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811121/

相关文章:

android - BaseAdapter 在 getView() 方法调用中返回错误的位置

android - 编译gradle文件中的问题

Android 多行 Snackbar

android - 我需要遍历一组图像并从 native react 中一个接一个地显示它们

android - Android 在 OpenGL ES 下闪烁黑屏

android - 使videoview中的视频加载速度更快

Android:我的应用不支持 Galaxy S4

java - Android ListView 点击时抛出 NullPointer 异常

android - 如何在以sd卡为资源的 ListView 中为每一行设置缩略图?

android - FragmentTransation setCustomAnimations 不起作用