这是我的自定义视图代码。我试图阻止对此EditText的多次点击,但它仍然打开两个EditStatusActivity屏幕。为什么呢?
setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
if(isClicked) {
return;
}
isClicked = true;
setEnabled(false);
setClickable(false);
final Intent intent = new Intent(activity, EditStatusActivity.class);
intent.putExtra(STATUS, currentStatus);
activity.startActivityForResult(intent, EDIT_STATUS_REQUEST_CODE);
isClicked = false;
setEnabled(true);
setClickable(true);
}
});
答案 0 :(得分:7)
在onActivityResult方法
上重置isClicked和setEnabled @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
isClicked = false;
setEnabled(true);
}
正如pablochan所写:
startActivityForResult
方法是非阻止的。这意味着 一旦你开始EditStatusActivity
,你立即设置isClickable
变量为false,这就是您能够制作的原因 额外点击。
您应该永远不要将isClickable
设置为true,或者在onActivityResult
方法中将其设置为true。
答案 1 :(得分:0)
startActivityForResult
方法是非阻止的。这意味着只要您启动EditStatusActivity,就会立即将isClickable
变量设置为false
,这就是您可以进行额外点击的原因。
您应该在第一次点击后永远不要将isClickable
设置为true,或者在onActivityResult方法中将其设置为true。
答案 2 :(得分:0)
我还有一个选择。
处理Click事件时删除侦听器并将其恢复为onResume。