我有一个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个布局。
答案 0 :(得分:0)
覆盖getPageWidth()
中的PagerAdapter
以返回要用于网页的部分屏幕。对于一次四页,返回0.25
应该有效。
Here is a sample project证明了这一点。另外here is a blog post概述了这种技术以及其他几种技术。
关于您当前的代码,我不确定您是如何确定的 “当你滚动时,你一次只能移动1个布局”。毕竟,由于你没有改变布局中的任何东西,它们看起来都是一样的。
因此,我将做两个假设,这似乎符合您描述的症状:
您选择的代码不会在inflate()
来电和addView()
来电之间显示。
相关代码是根据position
填充小部件。
请记住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
或其他)