1

在我的程序的一部分中,我在单击按钮时更改了按钮的 ID 和文本。再次单击按钮时,id 和 text 将恢复为以前的值。但是,我收到错误。(我已在出现错误的行中添加了注释)。

我只需要通过单击按钮来更改文本。然后通过再次单击将其更改回旧值。有没有人有解决方案或更好的想法来实现这一点?

 public void onClick(View v) {
      switch(v.getId()){
           case R.id.btn_start_again:
                mPlayer.stop();
                start.setText("Pause");
                start.setId(R.id.pause);
                break;

           case R.id.pause:
               start.setText("Pause");          //here it is not accepting pause
               start.setId(R.id.btn_start_again);
               break; 
       }
  }
4

6 回答 6

4

我认为您不想更改id. Button看起来您正在做的是Button开始播放然后在播放时转为暂停。只需将两者Buttons放在 xml 中的相同空间中即可。visibility从暂停的Button开始,然后gone检查visibility函数中的 。

就像是

public void onClick(View v) {
switch(v.getId()){
case R.id.btn_start_again:
    mPlayer.stop();
    btnPause.setVisibility(View.VISIBLE);
    btnPlay.setVisibility(View.GONE);
    break;

case R.id.pause:
    btnPause.setVisibility(View.GONE);
    btnPlay.setVisibility(View.VISIBLE);
    break; 
}

按钮文档

于 2013-08-15T12:27:03.113 回答
2

您不需要更改按钮的 ID,使用类似布尔标志的东西来跟踪按钮的状态

boolean isPlaying = false;

public void onClick(View v) {
   switch(v.getId()){
       case R.id.btn_start_again:
          if(isPlaying){
              mPlayer.stop();
              start.setText("Play");         
              isPlaying = !isPlaying;
          }else{
              //mPlayer.start() <--- you don't start it anywhere?
              start.setText("Pause");
              isPlaying = !isPlaying;
          }
       break;
       }
    }
于 2013-08-15T12:30:32.517 回答
1

有更好的方法可以做到这一点。

根据状态为按钮设置不同的标签。

于 2013-08-15T12:28:35.373 回答
1

以编程方式更改 ID 是一个坏主意,更好的解决方案是定义一个全局布尔值:

    private boolean isSelected = false;

然后在您的 onClick 中:

           public void onClick(View v) {

               if(isSelected==false){

                  mPlayer.stop();
                  start.setText("Pause");
                  isSelected=true;
              }else{

                  start.setText("Pause"); 
                  isSelected=false;

                }
于 2013-08-15T12:29:22.527 回答
1

您可能只有 1 个按钮,它可以处理不同的事件并根据当前按钮文本更改其行为。

public void onClick(View v) {
    switch(v.getText()){
        case "Pause":
            mPlayer.stop();
            start.setText("Play");
        break;

        case "Play":
            start.setText("Pause");
            mPlayer.play();
        break; 
    }
}

或者您可以让按钮最初设置为触发 1 个单击事件,该事件一旦触发,然后将按钮单击事件设置为第二个单击事件,反之亦然

public void onClickOne()
{
   // do stuff
   btn.OnClick = onClickTwo();
 }

public void onClickTwo()
{ 
    // do stuff
   btn.OnClick = onClickOne
}
于 2013-08-15T12:32:32.740 回答
1

我最终以这种方式做到了:

 String value=start.getText().toString();
 if(value.equals("Start")){
     start.setText("Pause");
 }
 else if(value.equals("Pause")){
     start.setText("Start");
 }
于 2013-08-15T14:57:34.597 回答