Добавить вертикальную прокрутку в раздел Android ViewPager

У меня есть viewPager, который я заполняю, используя FragmentStatePagerAdapter. Работает нормально, может пролистывать заполненные страницы по горизонтали.

Однако средний раздел каждой страницы в viewPager состоит из listView. Этот просмотр списка иногда не укладывается в обозначенную область, мне нужно иметь возможность прокручивать вертикально. Но в данный момент я не могу прокручивать вертикально этот раздел viewPager.

Похоже, что viewPager потребляет все события прокрутки (как горизонтальные, так и вертикальные).

Я не хочу вертикальный viewPager; Я видел несколько ответов на это в Stackru.

Я хочу, чтобы только раздел в середине viewPager для прокрутки по вертикали, и этот раздел является listView

Это основной макет для вкладки с viewPager:

           <LinearLayout 
            android:id="@+id/history"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:background="@color/fdi_gray">
            <android.support.v4.view.ViewPager
                 android:id="@+id/historyFragment_container"
                 android:layout_weight="0.85"
                 android:layout_width="fill_parent"
                 android:layout_height="0dip"/> 
             <include layout="@layout/page_indicator_history"
                android:layout_height="0dip"
                android:layout_width="fill_parent"
                android:layout_weight="0.05"
                android:background="@color/darker_gray"                 
                android:layout_marginTop="2dp"/>
       </LinearLayout>

А макет, который используется адаптером ViewPager для заполнения над ViewPager, выглядит следующим образом:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spaceHolderLocations"> 
<TextView
    android:id="@+id/locationName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_marginTop="10dp"
    android:layout_centerHorizontal="true"
    android:textStyle="bold"
    android:textSize="17sp"/>
 <TextView
    android:id="@+id/latlon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_below="@+id/locationName"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="3dp"
    android:layout_centerHorizontal="true"/>

 <View
     android:id="@+id/listViewStart"
     android:layout_width="match_parent"
     android:layout_height="0.5dip"
     android:layout_marginLeft="3dp"
     android:layout_marginRight="3dp"
     android:layout_below="@+id/latlon"          
     android:background="@color/white" />

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/fdi_gray"
    android:layout_below="@+id/listViewStart"
    android:layout_marginLeft="3dp"
    android:layout_marginRight="3dp"
    android:divider="@color/white"
    android:dividerHeight="0.5dip"
    android:padding="1dp">       
</ListView>  
<View
     android:id="@+id/listViewEnd"
     android:layout_width="match_parent"
     android:layout_height="0.5dip"
     android:layout_marginLeft="3dp"
     android:layout_marginRight="3dp"
     android:layout_below="@android:id/list"         
     android:background="@color/white" /> 
<TextView
    android:id="@+id/curingLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/listViewEnd"
    android:gravity="center"
    android:text="@string/curingLabel"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="30dp"        
    android:textSize="17sp"/>
 <TextView
    android:id="@+id/curingValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/curingLabel"
    android:layout_marginLeft="30dp"
    android:layout_alignBottom="@+id/curingLabel"
    android:textStyle="bold"        
    android:textSize="17sp"/>       

Пожалуйста, обратите внимание на список в приведенном выше макете.

Это раздел ViewPager, который я хочу прокручивать; но не могу, я могу только прокручивать страницы по горизонтали, а не по вертикали содержимое списка, если оно не соответствует странице.

Этот вопрос подошел близко, но это не то, что я ищу: ссылка

Благодарю.

2 ответа

Реализуйте следующую функциональность. Я надеюсь, что это поможет вам.

    mList = (ListView) findViewById(R.id.list);
    mList.setOnTouchListener(new View.OnTouchListener () {

    @Override
            public boolean onTouch(View v, MotionEvent event) {
                mList.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
}
    });

Когда происходит событие касания, родитель всегда перехватывает событие. Здесь родителем является View Pager. Что вы пытаетесь сделать здесь, так это то, что при появлении представления касания в списке попросите родителя не перехватывать событие касания. Таким образом, событие касания будет получено дочерним элементом, который здесь является ListView, и, таким образом, прокручивается соответствующим образом.

По сути, вы не можете установить высоту вашего списка в "обернуть содержимое". задайте фиксированную высоту или выберите другой макет, например, linearlayout, и установите его вес равным 1. если вы установите его для переноса контента, он просто займет все пространство и выйдет за пределы экрана.

Другие вопросы по тегам