ListViewでsmoothScrollByを使う

ListViewのonScrollStateChangedでsmoothScrollByしたらAndroid 2.3.x(RAM512MB)でStackOverFlowが発生する状態になりハマったのでメモ


listview.setOnTouchListener(new ListView.OnTouchListener(){
	@Override
	public boolean onTouch(View arg0, MotionEvent event) {
		switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_MOVE:
			isTouch = true;
			break;
		}
		return false;
	}
});

listview.setOnScrollListener(new ListView.OnScrollListener() {
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		switch (scrollState) {
		case OnScrollListener.SCROLL_STATE_IDLE:
			if(isTouch)
			{
				//listview.smoothScrollBy(distance, duration);//ここでsmoothScrollするとStackOverFlowする
				mSmoothScrollHandler.removeCallbacks(doSmoothScroll);
				mSmoothScrollHandler.post(doSmoothScroll);
				isTouch = false;
				break;
			}
		}
	}

	private Runnable doSmoothScroll = new Runnable() {
		@Override
		public void run() {
			listview.smoothScrollBy(distance, duration);
		}
	};
}
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中