LoginSignup
32
29

More than 5 years have passed since last update.

ListViewの中にScrollViewを入れてイイ具合にスクロールを両立させて下さい。

Posted at

(ええ~そんなこと言われても・・・)ちょっと調べてみます。(その前にその仕様でいいんですか?)

やり方

ListViewにセットするAdapterのgetViewを拡張します。
条件として、ScrollViewのlayout_heightはwrap_contentとかではなくて固定値にする必要があります。

HogeAdapter.java

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // 省略
        // ScrollViewクラスのscrollViewローカル変数 が参照できる状態とします。

        scrollView.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                if(action == MotionEvent.ACTION_DOWN){
                    ScrollView sv = (ScrollView)v;
                    if(sv.getChildAt(0).getHeight() > sv.getHeight()){
                        sv.requestDisallowInterceptTouchEvent(true);
                    }
                }
                return v.onTouchEvent(event);
            }
        });

        // 省略

        return convertView;
    }


解説

この一行で、親に対してインターセプトやめてくれって出せます。


sv.requestDisallowInterceptTouchEvent(true);

通常はListViewがスクロールします。
ScrollViewに対してタッチダウンが発生した時にスクロールが可能な(ScrollViewの高さより子の高さが大きい)場合は、requestDisallowInterceptTouchEventを呼び出し、ScrollViewがスクロールするようにしています。

ひとこと

本当はAdapter#getView内でsetOnXXListenerは書きたくないでござる。

32
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29