1

プログラムの一部で、ボタンがクリックされたときにボタンの 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; 
       }
  }
4

6 に答える 6

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

さまざまなイベントを処理し、現在のボタンのテキストに基づいてその動作を変更できるボタンを 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回のクリックイベントを発生させるようにボタンを設定し、一度発生させてからボタンのクリックイベントを2番目のクリックイベントに設定し、その逆を行うこともできます

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 に答える
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 に答える