onTouch监听器,toggleButton处于错误状态

时间:2013-10-30 10:53:40

标签: android

我有一个toggleButton连接到onTouch监听器,当我按下按钮时图像改变,文本也改变了。当我放手时,图像应该改回来,文本也应该改变。这一切都很好,除了当我松开按钮时,文本只会改变回来几分之一秒,然后返回到“on”文本。图像工作正常,为什么会这样?

的xml:

 <ToggleButton
        android:id="@+id/PTT_button5"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:text="@string/ptt5"
        android:textOn="Push To Talk On"
        android:textOff="Push To Talk Off"
        android:background="@drawable/btn_lightblue_glossy"
        android:textColor="@android:color/white"
        android:textSize="15sp"
        />    

的java:

  public boolean onTouch(View v, MotionEvent event) {
        if(!serviceConnected) {
            return true;
        }
        int action = event.getAction();
        try {
            if(action == MotionEvent.ACTION_DOWN) {
                service.sendDtmf(callId, KeyEvent.KEYCODE_STAR);
                service.sendDtmf(callId, KeyEvent.KEYCODE_9);
                ((ToggleButton) v).setBackgroundResource(R.drawable.btn_blue_glossy);
                ((ToggleButton) v).setChecked(true);
            } else if (action == MotionEvent.ACTION_UP) {

                service.sendDtmf(callId, KeyEvent.KEYCODE_POUND);
                service.sendDtmf(callId, KeyEvent.KEYCODE_POUND);
                ((ToggleButton) v).setBackgroundResource(R.drawable.btn_lightblue_glossy);
                ((ToggleButton) v).setChecked(false);
            }
        } catch (RemoteException e) {
            Log.e(THIS_FILE, "Cannot ask sip service to send dtmf", e);
        }
        return false;
    }
}

1 个答案:

答案 0 :(得分:2)

ToggleBUtton有自己的监听器来改变状态。由于您返回false,会发生什么:

1)onTouch发生了,因此按钮状态已更改ON-->OFF

2)然后调用toogle按钮的listener(因为您返回false,不消耗事件),因此状态更改OFF --> ON

只需删除以下行,现在释放切换按钮时文本将会改变。

((ToggleButton) v).setChecked(true);

((ToggleButton) v).setChecked(false);

更新,因为您需要在触摸按钮时更改文本(而不是在触摸释放后)。

return true
触摸监听器

不会调用切换按钮的监听器。

或者,正如您所提到的,只需使用普通按钮:)