2013-05-16 70 views
5

有沒有辦法只註冊一個按鈕?目前,在我的活動中,我有兩個按鈕,每個都開始另一項活動 - 此刻如果我同時按下它們兩個活動開始,一個在另一個上。我想防止這種情況發生,並且在任何給定時間只有一個或另一個運行。我想過關閉多點觸控,但對我來說這種感覺很不好。阻止用戶一次按下兩個按鈕?

編輯:我試着這樣做:

public class MainActivity extends Activity { 

    Button btn_send; 
    Button btn_receive; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn_send = (Button) findViewById(R.id.btn_send); 
     btn_receive = (Button) findViewById(R.id.btn_receive); 
     OnClickListener listener = new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (v.equals(btn_send)) { 
        if (isWifiConnected()) { 
         btn_receive.setClickable(false); 
         startActivity(new Intent(MainActivity.this, 
           SendActivity.class)); 
        } else { 
         Toast.makeText(MainActivity.this, 
           "Wifi connection required", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } else if (v.equals(btn_receive)) { 
        if (isWifiConnected()) { 
         btn_send.setClickable(false); 
         startActivity(new Intent(MainActivity.this, 
           ReceiveActivity.class)); 
        } else { 
         Toast.makeText(MainActivity.this, 
           "Wifi connection required", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } 

      } 

     }; 
     btn_send.setOnClickListener(listener); 
     btn_receive.setOnClickListener(listener); 
    } 

    @Override 
    public void onPause() { 
     btn_send.setClickable(true); 
     btn_receive.setClickable(true); 
     super.onPause(); 
    } 
} 

我仍然可以按兩個按鈕同時在我的Galaxy S2 GT-I9100。

+0

一次按鈕單擊可以禁用按鈕,或使其不可見 – Raghunandan

+0

你在'onClick'裏面調用'startActivity'還是推遲? –

回答

1

註冊相同onClickListener兩個按鈕,前者已被點擊

+0

,並在用戶返回到「活動」時調用'onPause'中的'setEnabled(true)'。實際上不需要使用一個'onClickListener'。 –

+0

我同意,但爲什麼有更多的人,如果它不是嚴格需要? – Blackbelt

+0

這是個人偏好。我不喜歡'ifs'或'switches',並儘可能避免使用面向對象的代碼。當然,當這是有道理的... –

0

使用相同的點擊聽者當調用setEnabled (false)後者。 即,爲類實現onClickListner,爲兩個按鈕實現button.setOnClickListner(this)。

0

裏面您共同的onclick監聽

if(oneClick){ 
    oneClick = false; 
    //launch the activity 
} 

,並重置標誌的onPause,或在適當情況下。

+0

我也試過,沒有骰子。 – Logan

0

試試這個

button1.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       button2.setClickable(false); 

       //launch first activity 
      } 
     }); 

button2.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       button1.setClickable(false); 

       //launch second activity 
      } 
     }); 
1

首先,創建一個類來處理觸摸事件,就像下面:

public class SingleClickTouchListener implements OnTouchListener { 
    private boolean mOneViewClicked = false; 

    /** 
    * Holds the clicked view. Only allow click in other views when this view is no longer clicked. 
    */ 
    private Object mClickedView = null; 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvt) { 
     boolean consumed = false; 

     switch (motionEvt.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (!mOneViewClicked) { 
       mClickedView = view; 
       mOneViewClicked = true; 
      } else { 
       consumed = true; 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      if (mClickedView == view) { 
       mOneViewClicked = false; 
       consumed = false; 
      } else { 
       consumed = true; 
      } 
      break; 
     default: 
      // No action required. 
      break; 
     } 

     return consumed; 
    } 
} 

然後,創建這個類的一個實例:

private SingleClickTouchListener mSingleClickTouchListener = new SingleClickTouchListener(); 

現在將相同的實例傳遞給您不想同時按下的所有視圖(或按鈕)。

view1.setOnTouchListener(mSingleClickTouchListener); 
view2.setOnTouchListener(mSingleClickTouchListener); 
view3.setOnTouchListener(mSingleClickTouchListener); 
1

這爲我工作

boolean hasRunOnce = false; 
ImageButton clickExample1, clickExample2; 

    clickExample1 = (ImageButton) findViewById(R.id.btnExample1); 
    clickExample1.setOnClickListener(this); 

    clickExample2 = (ImageButton) findViewById(R.id.btnExample2); 
    clickExample2.setOnClickListener(this); 


} 

@Override 
public void onClick(View v) { 


    if (hasRunOnce == false) { 
     hasRunOnce = true; //Stop users clicking buttons simultaneously 

     switch (v.getId()) { 
     case R.id.btnExample1: 
      //do stuff 
      break; 
     case R.id.btnExample2: 
      //do stuff 
      break; 

     } 
    } 
} 



@Override 
protected void onResume() { 
    hasRunOnce = false; 

    super.onResume(); 
} 

}

7

機器人:splitMotionEvents = 「假」 的按鈕的持有人