2015-05-15 137 views
0

我一直在嘗試每次點擊更改按鈕的文本,並在第一次點擊該按鈕時取得了成功。一直在玩button.setTag和button.getTag,試圖通過按鈕點擊的狀態進行轉換。Android Studio-點擊按鈕多次更改按鈕文字

正是我想做的事......

按鈕默認爲「」啓動 首先點擊文字進入「X」 第二次點擊文字進入到「O」 第三次點擊文字進入「」 //沒有嘗試啓用此又

這是到目前爲止我的代碼..

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Button button = (Button) findViewById(R.id.button); 
       button.setTag(0); 
       button.setText(""); 
       final int status = (Integer) view.getTag(); 
       switch (status) { 
        case 0: 
         button.setText("X"); 
         view.setTag(1); //pause 
         break; 
        case 1: 
         button.setText("O"); 
         view.setTag(0); //pause 
         break; 
       } 
      } 
     });//if you know why android studio makes me add this get bonus points 
    } 
+0

您每次單擊按鈕時將您的標記設置爲0。至於你的評論}};這是你的OnClickListener的結局 – Pztar

回答

0

這是你的問題:

button.setTag(0); 
button.setText(""); 
final int status = (Integer) view.getTag(); 

所以狀態永遠是0

你的方法改成這樣:

button.setTag(0);//do this when you first initialize the button. You can even specify this in Xml with android:tag="0" 
button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Button button = (Button) findViewById(R.id.button); 
     button.setText(""); 
     final int status = (Integer) view.getTag(); 
     switch (status) { 
      case 0: 
       button.setText("X"); 
       view.setTag(1); //pause 
       break; 
      case 1: 
       button.setText("O"); 
       view.setTag(0); //pause 
       break; 
     } 
    } 

}); 

我還建議改變標籤的靜態變量清晰度。要做到這一點,聲明這些類常量:

public static final int STATE_PAUSED = 0; 
public static final int STATE_UNPAUSED = 1; 

現在,您可以設置與命令的標籤:

view.setTag(STATE_PAUSED); 

view.setTag(STATE_UNPAUSED); 
+0

菲爾工作。對於任何想要查看更新代碼的人,請參閱下文。我將開始玩弄你的第二個建議。感謝您花時間解釋! – SemperFi

0

目前每次您按一下按鈕,你的按鈕標籤設置爲0:

button.setTag(0); 

改成這樣:

if(button.getTag() == null){ 
    button.setTag(0); 
} 

,它應該工作。

0
int count = 2; 
button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Button button = (Button) findViewById(R.id.button); 
      count++; 
      if(count%3==0)button.setText("X"); 
      else if(count%3==1)button.setText("O"); 
      else button.setText(""); 

      } 
     } 
    }); 
} 

這個怎麼樣? 此外,我建議在onCreate中投射所有小部件,因此您只需在每個生命週期中執行一次。

+0

偉大的建議。他們在onCreate內。這讓我想起了一段時間。只有這樣做了很短的時間。 – SemperFi

0

button.setTag(0); button.setText(「」);

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Button button = (Button) findViewById(R.id.button); 

      button.setText(""); 
      final int status = (Integer) view.getTag(); 

      switch (status) { 
       case 0: 
        button.setText("X"); 
        view.setTag(1); //pause 
        break; 
       case 1: 
        button.setText("O"); 
        view.setTag(2); //pause 
        break; 
       case 2: 
        button.setText(""); 
        view.setTag(0); 
      } 
     } 
    }); 
}