2016-09-20 84 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; 
     } 
    } 
});