Help us understand the problem. What is going on with this article?

ViewPagerをネストさせたとき、子ViewPagerのスワイプイベントを無効にしたい

More than 5 years have passed since last update.
                            やつを追う前に言っておくッ!
                    おれは今ViewPagerをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれはViewPagerを入れていたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにかViewPagerしていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    催眠術だとか超スピードだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…

やりたいこと

タイトルと同じこと言ってますが、親ViewPagerだけスワイプ操作を受け付けるようにしたかったのです。

素直にViewPagerをネストさせたときの挙動

どうなるでしょうか。

親ViewPagerの中に子ViewPagerを入れた状態でスワイプすると、子ViewPager上でイベントが消化されます。
なので子ViewPagerの中身が切り替わります。

上の挙動は至極当然です。
が、期待してる挙動とは違うので何かしらの処理が必要です。

やりたいことを解決する

ViewPagerのドキュメントを読んでいたらcanScrollHorizontallyというメソッドがありました。

子ViewPagerを拡張して、canScrollHorizontallyが常にfalseを返すように書き換えれば子ViewPagerのスワイプ処理は無視され、親ViewPagerにイベントが移譲されます。
これで解決したはず。

IgnoreSwipeViewPager.java
public class IgnoreSwipeViewPager extends ViewPager {

  public RecommendItemViewPager(Context context) {
    super(context);
  }

  public RecommendItemViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  public boolean canScrollHorizontally(int direction) {
    return false;
  }
}

Touch系のイベントのハンドラ各種をイジらないとダメか。。と畏怖してたけど、簡単に解決できてよかった。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした