2013-09-25 4 views
0

У меня есть ViewPager, с которым я хочу, чтобы на одном экране отображалось 4 экземпляра макета, и вы просматриваете следующий 4. Это означает, что мне нужно добавить 4 экземпляра макета на одну страницу, или мне нужно указать ViewPager прокручивать по 4 страницы за раз. Я хотел бы сделать это, не делая 4 копии макета в том же xml. Вот как я это сейчас обработки:4 макеты 1 страница в ViewPager

@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 макета на экране за раз, но при прокрутке вы перемещаете только один макет за один раз.

ответ

0

Переустановите getPageWidth() в своем PagerAdapter, чтобы вернуть часть экрана для использования на странице. Для четырех страниц за один раз следует возвращать 0.25.

Here is a sample project, демонстрирующий это. Также here is a blog post излагает эту технику и пару других.


Что касается текущего кода, я не знаю наверняка, как вы определить, что «при прокрутке, вы только двигаться мимо 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; 

(хотя я бы назвал i быть layout_index или что-то)

+0

Я уже есть. Наверное, я не уточнил. На экране уже есть 4 макета, но при прокрутке вы просматриваете только один макет за раз, а не желаемый 4. – KairisCharm

+0

@KairisCharm: сколько страниц изменяется, зависит от того, насколько и как быстро вы салфетки. Если вы возьмете мой примерный проект и измените его, чтобы вернуть '0.25f', вы увидите, что если вы пронеслись с крайнего правого угла в крайнее левое положение, вы будете перемещать три или четыре страницы, в зависимости от скорости прокрутки. – CommonsWare

+0

Но я никогда не хочу, чтобы он прокручивал только 1 за раз. Я хочу заставить его двигаться 4 за раз. Нет ли способа сделать это? – KairisCharm

Смежные вопросы