emu雑記

C#erな人が書いているブログです。最近、javaを始めました。なんかいろいろやってます。

androidのGridViewでスワイプが発生しない現象

この現象に1か月ほど悩まされてました。

スワイプ操作はGestureDetectorを使って実装します。

以下、Fragment内での処理。

/**
 * ジェスチャー
 */
private final GestureDetector mGestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
		Log.i("GestureDetector", "スワイプ");
		//ここにスワイプ処理
		return super.onFling(e1, e2, velocityX, velocityY);
	}
});

@Override
public void onActivityCreated(Bundle savedInstanceState) {
	super.onActivityCreated(savedInstanceState);
	// GridViewを取得
	GridView gridview = (GridView) getActivity().findViewById(R.id.gridview);
	// フリックイベントの登録
	gridview.setOnTouchListener(new OnTouchListener() {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			return mGestureDetector.onTouchEvent(event);
		}
	});
}

ってな感じで実装しました。

ところが、上下方向のスワイプでは反応するのに、左右方向のスワイプだけ発生しない。

かなりの時間をかけて調べてたんですが、単純なことでしたね。

答えはViewPagerを使っていたからでした。
ViewPagerを使っていると、左右方向のスワイプ処理が乗っ取られて子Viewのイベントが発生しないようです。

同じ現象に困っている人が居たらお試しください。