2013-09-11 4 views
2

У меня есть viewPager, который я заполняю с помощью FragmentStatePagerAdapter. Он отлично работает, может проходить через населенные страницы по горизонтали.Добавить вертикальную прокрутку в раздел android viewPager

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

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

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

Я хочу только раздел в середине ViewPager для прокрутки по вертикали, и этот раздел является ListView

Это mainlayout для вкладки с 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, которую я хочу прокручивать; но не могу, я могу только прокручивать по горизонтали через страницы не вертикально через содержимое listView, если он не соответствует странице.

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

Спасибо.

+0

Это должно работать из коробки, пожалуйста, введите код здесь ... – shem

+0

Я добавил макеты, которые я использую. Благодарю. – ngwane

+0

Попробуйте удалить весь текстовый вид из одного просмотра страницы и оставить только просмотр списка с помощью 'android: layout_height =" match_parent "' и посмотреть, работает ли это – shem

ответ

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, и таким образом прокручивается соответственно.

+1

Хороший помощник. Это был точный ответ, который я искал. – Avinash

0

В принципе вы не можете установить высоту своего списка, чтобы быть «обернуть содержимое». дать фиксированную высоту или выбрать другой макет, такой как linearlayout, и установить его вес на 1, будет другим решением. если вы установите его для обертывания контента, он просто займет все пространство и выходит за пределы экрана.

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