Вопрос по scrollview, android, android-viewpager, swipe – Как получить несколько ViewPager в ScrollView?

3

Я пытаюсь реализовать макет, который содержит список ViewPager. Каждый ViewPager можно прокручивать независимо. Смотрите ссылку на картинку ниже.

изображение макета

Я попытался с ScrollView и LinearLayout с ViewPager внутри него, но у меня отображается только один ViewPager. Можно ли даже получить несколько ViewPager на одном экране?

мой код до сих пор: main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager2"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager3"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />
    </LinearLayout>

</ScrollView>

MainActivity

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ViewPagerAdapter adapter2 = new ViewPagerAdapter( this );
        ViewPager pager = (ViewPager)findViewById( R.id.viewpager2 );
        pager.setAdapter( adapter2 );

        ViewPagerAdapter adapter3 = new ViewPagerAdapter( this );
        ViewPager pager3 =
            (ViewPager)findViewById( R.id.viewpager3 );
        pager3.setAdapter( adapter3 );   
    }

}

Есть идеи? Спасибо!  РЕДАКТИРОВАТЬ: этот код на самом деле работает!

Ваш Ответ

3   ответа
2

Эта проблема связана с высотой ViewPager по умолчанию, так как по умолчанию она принимает значение "fill_parent" , который мы не можем сбросить с помощью "wrap_content". Решение, которое я нашел, установив высоту к некоторому значению жесткого кода, вернет вам все элементы пейджерного представления, отображаемые на вашем экране.

Я знаю, что это какое-то сомнительное решение, но оно отлично работает для меня, и я надеюсь, что оно должно работать с вами.

-1

На вашем LinearLayout, в вашем XML. Задаватьandroid:weightSum="2", Для каждого окна просмотра установитеandroid:layout_weight="1", Кроме того, установите высоту каждого дочернего элемента LinearLayout в 0dp. Это должно делать свое дело

Нет проблем, рад, что у вас все получилось!
WeightSum = 2, и каждый layout_weight = 1 не справился. Когда я устанавливаю рост каждого ребенка равным 0dp, они вообще не появляются. kiberNet
@KiberNet: Привет, у меня такая же проблема. и я правильно устанавливаю усыновителя. и пробовать с помощью wgightsum тоже. Нет прогресса. и на самом деле, если я ViewPager в Scrollview так же, как вы просмотрели сам пейджер, не отображается. Пожалуйста, помогите мне, если у вас есть идеи.
На самом деле это была ошибка в MainActivity. Использовал setAdapter на неправильном ViewPager :) Спасибо за подсказку с weightSum в любом случае! kiberNet
12

В использовании нескольких ViewPager действительно есть что-то подозрительное. Я надуваю несколько представлений, каждое из которых содержит ViewPager, и только первый ViewPager заполняется данными из его адаптера. Однако, если я назначу каждому ViewPager уникальный идентификатор, все они будут заполнены.

У меня есть контейнер, единственным дочерним элементом которого является ViewPager:

ViewPager pager = (ViewPager) pagerContainer.getChildAt(0);
         pager.setId(i);

гдеi это положительный индекс цикла.

спасибо, ушло навсегда, чтобы найти этот ответ
Существует возможность вызова View.generateViewId () из API 17 ++.
спасибо за ваш ответ, который помогает мне решить проблему, заключающуюся в том, что добавлен только один видовой пейджер для дочернего представления. я использую mViewPager.setID (sViewPagerID ++), чтобы сделать идентификатор ресурса уникальным, sViewPagerID является статическим членом viewpager со ссылками на классы
Абсолютно правильный ответ для меня. Несколько дней сводил меня с ума, я просто не мог понять, почему фрагменты для всех других просмотровых страниц ниже первого не отображаются! Спасибо!
Вау, спасибо, это действительно помогло мне, я думаю, я никогда не смогу понять это без этого. Добавлял видовые пейджеры программно на вид, и они не работали, только первый. После того, как каждый из них получил конкретный идентификатор, он начал работать как шарм!

Похожие вопросы