ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Android Studio】備忘録#2 ScrollView内でListViewを動作させる方法

Android Studioで適当なアプリ開発を進めていますが
デフォルトの設定だと色々できなくて「ふんがー!」となっている日々です。

その「ふんがー!」となった内の一つが今回のタイトルにある
「ScrollView内でListViewを動作させる方法」です。

何も設定せずにScrollView内にListViewを配置させると
「一行分しか表示されない上にListView自体のスクロールができない」
という謎の仕様。

解消するために調べても簡単な方法がなかなかみつからなかったのですが
ようやく見つけたので備忘録として残しておきます。

■ScrollView内でListViewを動作させる方法

結論から言うと、以下のページの内容にある通りのことをすれば実現できます。
android-note.open-memo.net

ただこれだとScrollViewにListViewを使う画面に
毎回メソッドを実装しなくてはならないので
以下のようにstaticなクラスに実装しました。

Common.java

public class Common {
    /**
     * ScrollViewにListViewを入れ込む時に使う関数
     * @param listView ListView
     */
    public static void setListViewOnTouchListener(ListView listView) {
        listView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });
    }
}

ScrollViewを表示させる画面のActivityから
上記のメソッドを呼び出します。

■呼び出し記述方法

ListView listView = (ListView) findViewById(R.id.[ListViewのID]);    // ListView
Common.setListViewOnTouchListener(listView);

これでScrollView内でListViewが正常に動くようになります。