4个布局ViewPager中的1个页面

时间:2013-09-25 20:57:11

标签: android android-viewpager

我有一个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个布局。

1 个答案:

答案 0 :(得分:0)

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

Here is a sample project证明了这一点。另外here is a blog post概述了这种技术以及其他几种技术。


关于您当前的代码,我不确定您是如何确定的 “当你滚动时,你一次只能移动1个布局”。毕竟,由于你没有改变布局中的任何东西,它们看起来都是一样的。

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

  1. 您选择的代码不会在inflate()来电和addView()来电之间显示。

  2. 相关代码是根据position填充小部件。

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

    假设您有12个总布局。您想要在ViewPager中的3个页面中显示这些内容。因此,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;
    

    (虽然我会将i命名为layout_index或其他)