此代码是从我的活动onCreate()
调用的:
private void setOnClickListeners() {
mLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSignClicked();
}
});
mForgotYourText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onRemindClicked();
}
});
..
}
mLoginButton
是一个LinearLayout,里面有一个textView
mForgotYourText
是TextView
调试时我发现mLoginButton.setOnClickListener
赋值被调用了两次。
而mForgotYourText.setOnClickListener
只是按预期调用一次。
为什么会有区别?是因为eventHandling传播?
如果是这样 - 为什么public void onClick(View v)
无法返回布尔来停止传播?
更奇怪的是这个代码被调用了3次,
处理同一元素mLoginButton
:
mPhoneNumberField.setInputTextOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
setResult(RESULT_CANCELED);
finish();
return true;
}
});
答案 0 :(得分:0)
在触摸设备上,您需要将其设置为离开(因为您按下按钮并且当您从按钮上按住手指时实际点击它)
答案 1 :(得分:0)
如果你的xml中没有android:onClick
,onClick只会被调用一次。
由于onTouch
的工作方式,所以至少三次被调用:
它可用于跟踪触摸移动 - 它会持续报告触摸位置以及当前操作 - ACTION_DOWN
,ACTION_MOVE
或ACTION_UP
。这就是为什么你看到它被召唤三次的原因。如果您选中event.getAction()
,您会看到上面的三个操作都会出现一次。
要避免此行为,请检查操作。通常,您需要确保它是ACTION_UP
:
if (Event.getAction() == MotionEvent.ACTION_UP) {
....