Android - ViewPager作为ListView

时间:2015-07-23 07:27:12

标签: android listview android-viewpager

TL; DR - ViewPager作为ListView标头创建了一些问题。

我的活动有一个ListView,它提供了几种类型的数据。 我有一个HeaderView,一个粘滞的视图,其余的数据是"正常"列表项目。

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

在我的HeaderView中,我有一个用于我的用户的2张个人资料图片的视图寻呼机。

2个问题:

  1. 将寻呼机向右滚动到下一个图像并不会将图像打开到全屏宽度。 (但如果在列表视图中向下滚动,则向上滚动到屏幕顶部"重绘"标题视图,然后如果再次滚动寻呼机,它将被修复!)
  2. 有时图像不会加载到我的视图寻呼机。
  3. 你可以看到那些图片中的错误,第一张图片是试图将寻呼机向右滚动的状态,第二张图片是错误

    image one

    image two

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

    我曾在某些地方读过在列表视图中使用视图寻呼机并不是最佳选择,是否有不同的方法来实现我的目标?

2 个答案:

答案 0 :(得分:2)

我有同样的问题, 尝试删除列表视图的第三方库, 在那天我使用同一个并且它真的很快。 改为使用普通的列表视图。

答案 1 :(得分:1)

几个月前,我做了一个类似的伎俩。我尝试了网上几乎所有关于这个快速返回的库,所有这些都有错误,不适合我。也不适用于包含viewpager的标头。

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

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) {
         }
      });

我在标题中使用了一个视图寻呼机和一个pageradapter。在我的解决方案中,您必须对listview项使用固定大小,并将其声明为 CellHeight ,并为标头指定固定大小。它的 QuickReturnHeight

使用ListView + Header + ViewPager实现此模式有点困难。

我希望这会帮助你。