2012-09-28 100 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作为两个引用唐指向同一个对象。