3

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 のセクションです。ページに収まらない場合、リストビューのコンテンツを垂直方向ではなく、ページを水平方向にスクロールすることしかできません。

この質問は近づいてきましたが、私が探しているものではありません:リンク

ありがとう。

4

2 に答える 2

3

以下の機能を実装します。お役に立てば幸いです。

    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) によって受信されるため、それに応じてスクロールします。

于 2013-10-19T05:29:52.033 に答える
0

基本的に、リスト ビューの高さを「ラップ コンテンツ」に設定することはできません。固定の高さを指定するか、linearlayout のような別のレイアウトを選択してその重みを 1 に設定すると、別の解決策になります。コンテンツをラップするように設定すると、すべてのスペースが画面からはみ出してしまいます。

于 2013-10-19T06:03:23.850 に答える