通过单击更改按钮文本和ID

时间:2013-08-15 12:23:53

标签: android

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

我只需点击按钮即可更改文字。然后再次单击将其更改回旧值。有没有人有解决方案或更好的想法如何实现这一目标?

 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; 
       }
  }

6 个答案:

答案 0 :(得分:3)

我认为您不想更改id的{​​{1}}。你正在做的是有Button开始播放然后在播放时转为暂停。只需在xml的同一空间中放置两个Button即可。从暂停Buttons的{​​{1}}开始visibility,然后检查功能中的Button

这样的东西
gone

Button Docs

答案 1 :(得分:1)

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

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

答案 2 :(得分: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;

                }

答案 3 :(得分:1)

您无需更改按钮的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;
       }
    }

答案 4 :(得分: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
}

答案 5 :(得分:1)

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

 String value=start.getText().toString();
 if(value.equals("Start")){
     start.setText("Pause");
 }
 else if(value.equals("Pause")){
     start.setText("Start");
 }