2012-12-19 238 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。

相關問題