LoginSignup
3

More than 5 years have passed since last update.

SwipeRefreshLayoutの垂直スワイプとViewPagerの水平スワイプがバッティングするのを防ぐ

Last updated at Posted at 2017-02-25

概要

SwipeRefreshLayoutの中にViewPagerを含むようなレイアウトにすると、そのままではSwipeRefreshLayoutの垂直スワイプとViewPagerの水平スワイプがバッティングしてい、操作性が悪くなってしまいます。

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.v4.widget.SwipeRefreshLayout>

解決策

ViewPager.OnPageChangeListenerでViewPagerがスクロール中のときはSwipeRefreshLayoutを無効にすることでうまくいきます

以下、サンプルコードになります。


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(/* 適当なadapterを設定 */);

        final SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {
                // スクロールの状態がIDLE以外(スクロール中)のときは、SwipeRefreshLayoutは無効にする
                swipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
            }
        });
    }

参考

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
3