Android - ViewPager 作为 ListView 中的 Header

Android - ViewPager as a Header in a ListView

TL;DR - ViewPager 作为 ListView Header 造成一些问题。

我的 activity 有一个 ListView 可以显示多种类型的数据.. 我有一个 Header 视图,一个粘性视图,其余数据是一个 "normal" 列表项。

我正在使用这个库 -> https://github.com/LarsWerkman/QuickReturnListView 对于我的列表视图。

在我的 HeaderView 中,我有一个查看寻呼机,可以查看我用户的 2 张个人资料图片。

2 个问题:

  1. 将寻呼机向右滚动到下一张图片不会以全屏宽度打开图片。 (但是如果在列表视图中向下滚动,向上滚动到屏幕顶部 "redraw" header 视图,然后如果您再次滚动寻呼机,它就修复了!)
  2. 有时图像不会加载到我的视图寻呼机中。

你可以在这些图片中看到那个错误,第一张图片是试图向右滚动寻呼机的状态,第二张图片是错误

image one

image two

有人遇到过这样的问题吗?

我在某些地方了解到,在列表视图中使用视图寻呼机并不是最佳选择,是否有其他方法可以实现我的目标?

几个月前我做了一个和你想做的类似的把戏。我尝试了几乎所有关于这个快速 return 的网络库,但它们都有错误,不适合我。也不适合包含 viewpager 的 header。

后来我实现了自己的滚动监听器。这不是一个快速 return header 模式,但如果有时间,您可以添加动画。

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
         @SuppressLint("NewApi")
         @Override
         public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            int scrollOffset = 0;
            float transitionY;

            if (firstVisibleItem > 0) {
               scrollOffset += headerHeight;
               if (firstVisibleItem > 1) {
                  scrollOffset += (firstVisibleItem - 1) * cellHeight;
               }
            }

            if (listView.getChildCount() > 0) {
               scrollOffset += -listView.getChildAt(0).getTop();
               scrollOffset = -scrollOffset;
            }

            float scrollDelta = scrollOffset - prevOffset;
            float nextY = mQuickReturnView.getY() + scrollDelta;

            if (nextY < minRawY) {
               transitionY = minRawY;
            }
            else if (nextY > qReturnDelta) {
               transitionY = qReturnDelta;
            }
            else {
               transitionY = nextY;
            }

            mQuickReturnView.setY(transitionY);
            prevOffset = scrollOffset;
         }

         @Override
         public void onScrollStateChanged(AbsListView view, int scrollState) {
         }
      });

我在 header 中使用了一个查看寻呼机和一个 pageradapter。在我的解决方案中,您必须为列表视图项使用固定大小并将其声明为 CellHeight 并为 header 声明为固定大小。这是 QuickReturnHeight

用ListView + Header + ViewPager实现这个模式有点难。

希望对您有所帮助。

我遇到了同样的问题, 尝试删除列表视图的第三方库, 回到那天我用的是同一个,它真的有问题。 请改用普通列表视图。