やつを追う前に言っておくッ!
おれは今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系のイベントのハンドラ各種をイジらないとダメか。。と畏怖してたけど、簡単に解決できてよかった。