2016-09-20 79 views
1

我想做一個倒計時應用程序。我有一個開始倒計時的按鈕,倒計時文本也會出現在同一個按鈕上。所以當用戶再次按下時,我想暫停倒計時並在按鈕上隱藏文本,如果用戶再次按下按鈕,倒計時將開始,文本將再次顯示。多個OnClickListner按鈕

所以問題是我怎麼能做一個按鈕的多個OnClick事件? 我試了下面的代碼,但只有一個onClick正在工作,如果我再次按它永遠不會繼續第二onClick

play=(Button)findViewById(R.id.play); 

     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      //something 
    } 
     }); 

play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      //something 
    } 
     }); 

任何幫助,將不勝感激!謝謝!

+1

這是行不通的:

例如,可以如下編寫。使用一個監聽器,然後使用一個變量來檢查按鈕的「狀態」,或者你甚至可以檢查按鈕的文本以知道你是否應該啓動/停止。 – codeMagic

+0

這不是「按鈕狀態」。按鈕只是反映了其他事情的狀態,服務,媒體播放器等。並且再次根據某種外部狀態執行操作。 –

回答

3

監聽器被覆蓋。所以只需使用兩個不同的,並根據狀態進行設置。

public void onCreate(...){ 
    Button mButton = ... 
    mButton.setOnClickListener(startListener); 

} 

View.OnClickListener startListener = new View.OnClickListener() { 

    public void onClick(View v){ 
     // start countdown 
     // show text 

     mButton.setOnClickListener(stopListener); 
    } 
} 

View.OnClickListener stopListener = new View.OnClickListener() { 

    public void onClick(View v){ 
     // stop countdown 
     // hide text 

     mButton.setOnClickListener(startListener); 
    } 
} 

或者你可以只使用一個監聽器,並改變取決於可變

public void onCreate(...){ 
    Button mButton = ... 
    mButton.setOnClickListener(listener); 

} 

View.OnClickListener listener = new View.OnClickListener() { 

    public void onClick(View v){ 

     if (isRunning){ 
      // start countdown 
      // show text 
     } else { 
      // stop countdown 
      // hide text 
     } 
    } 
} 
+1

我喜歡第一個解決方案。它將2種功能分成2種不同的對象,而不必編寫一個ifired和else。但是,如果您對兩種條件都有一些共同的陳述,那麼第二種解決方案在性能方面會更好。 –

+1

非常感謝! –

0

在監聽器上使用,並使用布爾變量來檢查倒計時是否正在運行。你可以設置boolean var true或false,然後在if語句中檢查它。

0

你問了一下,我懷疑這是你真正想要的。

List<OnClickListener> listeners = Arrays.asList(
    new OnClickListener { ... }, 
    new OnClickListener { ... }, 
    new OnClickListener { ... }, 
    ... 
); 

play.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    for (OnClickListener l: listeners) { 
     l.onClick(v); 
    } 
    } 
} 
0

你可以有一個布爾標誌的行爲。

play.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (isCountDown) { 
      ...hide count down text 
      isCountDown = false; 
     } else { 
      ...show count down text 
      isCountDown = true; 
     } 
    } 
});