我有一个使用FragmentStatePagerAdapter填充的viewPager。它工作正常,可以水平浏览填充页面。
然而,viewPager上每个页面的中间部分由listView组成。这个列表视图有时候不适合指定区域,我需要能够垂直挖掘。但是我现在无法在viewPager的这一部分垂直滚动。
看起来viewPager正在消耗所有滚动事件(水平和垂直)。
我不想要一个垂直的viewPager;我在StackOverflow上看到了一些答案。
我只希望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部分;但不能,如果页面不适合页面,我只能在页面中水平滚动不通过listView内容。
这个问题很接近,但这不是我想要的:link
感谢。
答案 0 :(得分: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。您在此处尝试执行的操作是,当出现触摸列表视图时,请求父级不要拦截触摸事件。这样,触摸事件将由Child接收,这里是ListView,因此相应地滚动。
答案 1 :(得分:0)
基本上,您无法将列表视图的高度设置为“换行内容”。给出一个固定的高度,或选择一个不同的布局,如linearlayout,并将其权重设置为1将是另一种解决方案。如果你将它设置为包装内容,它将占用所有空间并超出屏幕。