まめーじぇんと@Tech

技術ネタに関して (Android, GAE, Angular). Twitter: @mame01122

Androidのボタン二度押しを防ぐ

AndroidのButtonのonClickが二度呼ばれてしまう問題の対処について。



今作っているサービスのClient side (Android)で、
サーバ通信を伴う部分があり、その契機の1つがButtonがClickされたときになっています。



βテストをやっている中で、
「ボタンが二度押しされて、二度、同じ内容の通信が走ってしまう」
という問題が見つかりました。
その結果、サーバ側のServletが、100msくらいの間隔で二度呼ばれてしまっていました。



どうやら、Android側のButtonのonClickが二度、
続けて呼ばれてしまっていることに原因があったようです。



ほんの短い間に、画面と指が細かく二度触れてしまうことがあるようで。
Xperiaだとそんなことはなかぅたんですが。。。)



そこで考えたのが、
「前回のonClick時から、1000ms以上立たないとボタンを押させなくする」
という処理を入れること。



具体的には、下記のようなUtilメソッドを、onClickの一番上に挟むことにしました。


	public static boolean isClickable() {
		long time = System.currentTimeMillis();
		if (time - mOldTime < 1000) {
			return false;
		}
		mOldClickTime = time;
		return true;
	}



この1000msが最終的によいかどうかのチューニングは必要だと思いますが、
今のところ、ボタンの二度押しは防げています。