0

我有一个 ViewPager,我希望一次在屏幕上显示 4 个布局实例,然后滚动查看接下来的 4 个。这意味着我需要将 4 个布局实例添加到单个页面,或者我需要告诉 ViewPager 一次滚动 4 页。我想这样做而不在同一个 xml 中制作 4 个布局副本。这是我现在的处理方式:

@Override
public Object instantiateItem(ViewGroup container, int position)
{   
    LinearLayout toReturn = new LinearLayout(getActivity());
    toReturn.setOrientation(LinearLayout.HORIZONTAL);

    for(int i = position; i < position + 4; i++)
    {
        View layout = getActivity().getLayoutInflater().inflate(R.layout.viewpager_fragment_layout, container, false);

        toReturn.addView(layout);
    }

    container.addView(toReturn);

    return toReturn;
}

结果与我一次将每个布局添加到 ViewPager 1 而不是将它们组合成一个布局相同。它一次在屏幕上显示 4 个布局,但是当您滚动时,您一次只能移过 1 个布局。

4

1 回答 1

0

覆盖getPageWidth()PagerAdapter以返回用于页面的屏幕部分。一次四页,返回0.25应该有效。

这是一个演示这个的示例项目。这里还有一篇博客文章,概述了这种技术和其他一些技术。


关于您当前的代码,我不确定您如何确定“当您滚动时,您一次只能移动超过 1 个布局”。毕竟,由于您没有更改布局中的任何内容,因此它们看起来都一样。

因此,我将做出两个假设,这似乎符合您所描述的症状:

  1. inflate()在您的通话和通话之间,您选择不显示某些代码addView()

  2. 有问题的代码是基于position.

请记住,这position页面索引,而不是布局索引

假设您总共有 12 个布局。您想在 3 页中显示这些内容ViewPager。因此,getPageCount()应该返回 3。而不是:

 for(int i = position; i < position + 4; i++) {

我希望看到:

 for(int layout_offset = 0; layout_offset < 4; layout_offset++) {
    int i=(position*4)+layout_offset;

(虽然我会命名ilayout_index或什么)

于 2013-09-25T21:01:04.157 回答