2012-02-27

Androidで同じタブがクリックされたイベントを検知する

Androidではイベントハンドラを1個しか登録できないので、onClickListenerをセットして同じタブがクリックされたイベントをとろうとすると、タブを切り替える処理が上書きされてしまうという問題があります。この問題を回避するには、setOnTouchListenerを利用すれば良いようです。 こんな具合です。
TabWidget tabWidget = tabHost.getTabWidget();
for (int i = 0; i < countOfTabs; i++) {
    View tab = tabWidget.getChildAt(i);
    tab.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            boolean consumedFlg = false;
            if (MotionEvent.ACTION_UP == event.getAction()) {
                View currTabView = tabHost.getCurrentTabView();
                if (v.equals(currTabView)) {
                    //なにかやる。v.getContext() でActivityを取得したり、tabAdapter.findFragmentAtPosition(i) でFragmentを取得したりできる
                    consumedFlg = true;
                }
            }
            return consumedFlg;
        }
    });
}

0 件のコメント: