2012-12-19 190 views
0

这是我的自定义视图的代码。我试图阻止多次点击这个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); 
     } 
    }); 

回答

7

重置isClicked及的setEnabled上onActivityResult方法

@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。

+2

你刚刚复制我的答案?那不是很酷的人。 – pablochan

+0

它像天堂一样工作! – Emerald214

+0

我之前有过这种类型的问题,而另一种做法是调度在将来重置'isClicked'变量与定时器500毫秒 – Budius

0

startActivityForResult方法是非阻塞的。这意味着只要启动EditStatusActivity,立即将isClickable变量设置为false,这就是为什么您可以额外点击的原因。

在第一次单击之后,您应该从不将isClickable设置为true,或者在onActivityResult方法中将其设置为true。

0

还有一个选项,我预设。

当您处理Click事件删除侦听器并将其恢复onResume。

相关问题