ListViewをScrollView内でスクロールする方法
ScrollView内にListViewを配置してしまうとListViewはスクロールできなくなります。
例えば1つのScrollViewの中にListViewを持つようなレイアウトがあるとします。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
この場合、リストビューよりスクロールビューの方が優先されてしまうのでリストビューをスクロールすることはできません。
そこでコード側で次のような調節をします。
ListView listView = findViewById(R.id.listView); listView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.getParent().requestDisallowInterceptTouchEvent(true); return false; } });
タッチイベントが起こるたびにrequestDisallowInterceptTouchEventメソッドを呼び出しています。
このメソッドは呼び出し元のビューの親またはそれ以上階層が上のビューからタッチイベントが起きた時にそれを遮らせないようにさせることができます。
ScrollViewの中にListViewがあるレイアウト自体が問題あるかもしれませんが、どうしてもというときはこれが一番簡単な解決方法だと思います。
© Kaz