在RatingBar中设置值

Ale*_*ack 9 android

我无法设置RatingBar的评级.我的代码如下.如何为动态添加的RatingBar设置默认评级?
这是我的代码.

public class DialogRate extends Activity implements OnRatingBarChangeListener {
...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_layout);
    LinearLayout ll_dialog = (LinearLayout) findViewById(R.id.linearLayout_dialog);     
    final RatingBar rate_bar = new RatingBar(context);
    rate_bar.setOnRatingBarChangeListener(this);
    rate_bar.setStepSize((float) 0.5);
    rate_bar.setMax(5);
    rate_bar.setId(1);   
    rate_bar.setRating(2.0f); // Error occur on this line!
    ll_dialog.addView(rate_bar);
}
...
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
     // TODO Auto-generated method stub
     TextView rate_val = (TextView) findViewById(0);
     rate_val.setText(Float.toString(ratingBar.getRating()));
}
Run Code Online (Sandbox Code Playgroud)

错误堆栈:

Thread [<1> main] (Suspended)   
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1645    
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1663 
ActivityThread.access$1500(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 117   
ActivityThread$H.handleMessage(Message) line: 931   
ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3683    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 507  
ZygoteInit$MethodAndArgsCaller.run() line: 839  
ZygoteInit.main(String[]) line: 597 
NativeStart.main(String[]) line: not available [native method]  
Run Code Online (Sandbox Code Playgroud)

对不起家伙这个错误很简单.onRatingChanged中的TextView在setRating之后动态创建.

Pav*_*oid 35

您可以使用此代码:

rate_bar.setRating(Float.parseFloat("2.0"));
Run Code Online (Sandbox Code Playgroud)

或使用此:

rate_bar.setRating(0.0f);
Run Code Online (Sandbox Code Playgroud)

  • 为什么要将它指定为`String`,然后解析它以使它成为`float`?`rate_bar.setRating(2f);`做同样的事情(即使你没有显式地声明它浮动它也会起作用,因为Java会自动转换为浮点数.) (5认同)