2012-09-28 149 views
3

我在我的應用中使用了RatingBar元素,並試圖使用OnRatingChangedListener進行設置。在監聽器中,我使用if語句在變量上做不同的事情。問題是,由於某種原因,當我有多個選項,這個監聽器不工作。它在onCreate()方法中設置,在if語句中的變量獲得一個值之前,但我試圖將它移動到其他位置,但沒有成功。Android RatingBar onRatingChanged監聽器

我的onCreate():

bar = (RatingBar) findViewById(R.id.serviceLevel); 
    bar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 

     @Override 
     public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 

     if(Code==null){ 
      Toast.makeText(TipCalculatorActivity.this, "Locationing error occured, please report to the developer.", Toast.LENGTH_LONG).show(); 
     }else if(Code=="1"){ 
      if(rating==0){ 
       autochange.setText("Precentage: 0%"); 
       precentage = 0; 
       calculate(value, precentage); 
      }else if(rating==0.5){ 
       autochange.setText("Precentage: 10%"); 
       precentage = 8; 
       calculate(value, precentage); 
      }else if(rating==1){ 
       autochange.setText("Precentage: 11%"); 
       precentage = 9; 
       calculate(value, precentage); 
      }else if(rating==1.5){ 
       autochange.setText("Precentage: 11%"); 
       precentage = 10; 
       calculate(value, precentage); 
      }else if(rating==2){ 
       autochange.setText("Precentage: 12%"); 
       precentage = 11; 
       calculate(value, precentage); 
      }else if(rating==2.5){ 
       autochange.setText("Precentage: 12%"); 
       precentage = 12; 
       calculate(value, precentage); 
      }else if(rating==3){ 
       autochange.setText("Precentage: 13%"); 
       precentage = 13; 
       calculate(value, precentage); 
      }else if(rating==3.5){ 
       autochange.setText("Precentage: 13%"); 
       precentage = 14; 
       calculate(value, precentage); 
      }else if(rating==4){ 
       autochange.setText("Precentage: 14%"); 
       precentage = 15; 
       calculate(value, precentage); 
      }else if(rating==4.5){ 
       autochange.setText("Precentage: 14%"); 
       precentage = 16; 
       calculate(value, precentage); 
      }else if(rating==5){ 
       autochange.setText("Precentage: 15%"); 
       precentage = 17; 
       calculate(value, precentage); 
      } 
     }else if(Code=="2"){ 
      if(rating==0){ 
       autochange.setText("Precentage: 0%"); 
       precentage = 0; 
       calculate(value, precentage); 
      }else if(rating==0.5){ 
       autochange.setText("Precentage: 10%"); 
       precentage = 10; 
       calculate(value, precentage); 
      }else if(rating==1){ 
       autochange.setText("Precentage: 11%"); 
       precentage = 11; 
       calculate(value, precentage); 
      }else if(rating==1.5){ 
       autochange.setText("Precentage: 12%"); 
       precentage = 12; 
       calculate(value, precentage); 
      }else if(rating==2){ 
       autochange.setText("Precentage: 13%"); 
       precentage = 13; 
       calculate(value, precentage); 
      }else if(rating==2.5){ 
       autochange.setText("Precentage: 14%"); 
       precentage = 14; 
       calculate(value, precentage); 
      }else if(rating==3){ 
       autochange.setText("Precentage: 15%"); 
       precentage = 15; 
       calculate(value, precentage); 
      }else if(rating==3.5){ 
       autochange.setText("Precentage: 16%"); 
       precentage = 16; 
       calculate(value, precentage); 
      }else if(rating==4){ 
       autochange.setText("Precentage: 17%"); 
       precentage = 17; 
       calculate(value, precentage); 
      }else if(rating==4.5){ 
       autochange.setText("Precentage: 18%"); 
       precentage = 18; 
       calculate(value, precentage); 
      }else if(rating==5){ 
       autochange.setText("Precentage: 19%"); 
       precentage = 19; 
       calculate(value, precentage); 
      } 
     } 
    } 
}); 

我的代碼變量是一個的AsyncTask完成後確定,所以可能產生UI之後。任何解決方案

+1

在任務完成並且'Code'不是'null'之前,偵聽器將不工作。但是當'Code'不是'null'時,它仍然不起作用,因爲你試圖用==來比較字符串,它不起作用(因爲它比較引用),而應該使用'Code.equals(「1」 )'。 – Luksprog

+0

非常感謝你,.equals工作!你能在答案中輸入這個,所以我可以選擇它嗎? – arielschon12

回答

5

爲了使你的代碼工作,你將不得不使用equals()方法來檢查Code具有正確的值:

// ... 
} else if (Code.equals("1")){ 
// ... 

==將測試引用和返回false作爲兩個引用唐指向同一個對象。