2017-05-18 102 views
1

單擊按鈕時,它應該會顯示一些文本。這是行得通的。每當超過按鈕點擊的限制時,它必須顯示一些用戶定義的文本。點擊3次按鈕後,它會顯示一些文字,而不是用戶定義的文字。這裏是我的OnClickListener代碼:條件按鈕單擊

final Button btnca =(Button) findViewById(R.id.btnca); 
btnca.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     int c=1; 
     if(c <= 3) //if button click for first three times 
     { 
      new FancyShowCaseView.Builder(Playing.this) 
        .title(questionPlay.get(index).getCorrectAnswer()) 
        .build() 
        .show(); 
      score -= 10; 
      txtScore.setText(String.format("%d", score)); 
      c++; 
     } 
     if(c>3) //if button click for after three times 
     { 
      new FancyShowCaseView.Builder(Playing.this) 
        .title("Your Limit Exceed") 
        .build() 
        .show(); 
     }} 
}); 
+0

在你的'setOnClickListener'方法之外聲明'int c = 1'。 –

回答

2

的問題是,c是本地onClick方法,因此它是從1開始的每一次點擊。嘗試將其移出課程級別

final Button btnca =(Button) findViewById(R.id.btnca); 
    btnca.setOnClickListener(new View.OnClickListener() { 

     int c=1; //initialize here so it's re-used in each onClick 

     @Override 
     public void onClick(View v) { 
      if(c <= 3) //if button click for first three times 
      { 
       new FancyShowCaseView.Builder(Playing.this) 
         .title(questionPlay.get(index).getCorrectAnswer()) 
         .build() 
         .show(); 
       score -= 10; 
       txtScore.setText(String.format("%d", score)); 
       c++; 
      } 
      if(c>3) //if button click for after three times 
      { 
       new FancyShowCaseView.Builder(Playing.this) 
         .title("Your Limit Exceed") 
         .build() 
         .show(); 
      }} 
    }); 

編輯:我應該提到這不是一個完整的解決方案。我會假設這個代碼在Activity(or Fragment).onCreate()。當您的生命週期組件重新創建時,計數器將重置配置更改,但我將爲解決方案留下該解決方案作爲練習:)

+0

該死的是一個多麼愚蠢的錯誤。非常感謝你 –

+0

我覺得你應該把'c'初始化爲'c = 0',否則你會在'3rd'點擊後得到敬酒。 – FAT

1

您應該在onClick()方法之外初始化計數器變量c。當然,您應該將它初始化爲c = 0而不是c = 1以獲得4th點擊後的敬酒。 FYI

final Button btnca =(Button) findViewById(R.id.btnca); 
    btnca.setOnClickListener(new View.OnClickListener() { 

     int c = 0; 

     @Override 
     public void onClick(View v) { 

      if(c <= 3) //if button click for first three times 
      { 
       new FancyShowCaseView.Builder(Playing.this) 
         .title(questionPlay.get(index).getCorrectAnswer()) 
         .build() 
         .show(); 
       score -= 10; 
       txtScore.setText(String.format("%d", score)); 
       c++; 
      } 
      if(c>3) //if button click for after three times 
      { 
       new FancyShowCaseView.Builder(Playing.this) 
         .title("Your Limit Exceed") 
         .build() 
         .show(); 

       // Reset if required 
       //c = 0; 

      }} 
    }); 

,如果要重置的變量c,然後重置(c = 0)就您的情況if(c>3)內:

試試這個。

希望這會有所幫助〜