大家好:)我一直在评级栏上工作,它运作正常,唯一的问题是它在用户离开页面或应用程序后没有保存评级。 SO的一位名叫Lal的用户帮助了我,我已经完成了所有设置,但似乎仍在做错事。它的工作方式是我在main-activity中有一个listview,当你点击listview行时,它会调用一个新类来加载相应的页面。在相应的页面上是ratingBar。我没有在mainactivity中调用ratingbar,我在类main_activity调用中调用它来引用单击的行。
以下是评级栏在ListItemActivity1.java中的代码
RatingBar ratingBar;
TextView ratingText;
SharedPreferences wmbPreference1;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item_activity_1);
ratingText = (TextView) findViewById(R.id.rating);
((RatingBar) findViewById(R.id.ratingBar1))
.setOnRatingBarChangeListener(this);
wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(this);
float rating = wmbPreference1.getFloat("numStars", 0f);
ratingBar.setRating(rating);
}
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromTouch) {
final int numStars = ratingBar.getNumStars();
editor = wmbPreference1.edit();
editor.putFloat("numStars", rating);
editor.commit();
int ratings = wmbPreference1.getInt("numStars", 0);
ratingText.setText(rating + "/" + String.valueOf(ratings));
}
}
问题出现在代码的最后一行。我收到一个错误,指出无法在基本类型int上调用toString()。我应该为此设置字符串吗?另一个问题是,使用新代码时,我在模拟器中收到错误,当我尝试在控制台中重新加载说启动画面无法加载,活动未启动时,其当前任务已被带到前面。这一切似乎源于共享偏好和上面的最后一行代码。
任何帮助都会受到赞赏,我已经被困在这个评级栏上一段时间^^并且真的想继续使用应用程序中更紧迫的部分......
答案 0 :(得分:0)
要将int值转换为字符串,请使用String.valueOf(ratings)
。
无论如何,您的代码还有其他一些问题。在onRatingChanged()
中,我假设您要将当前评级保存到SharedPreferences中。该变量为rating
(因为getNumStars()
返回的是总星数,而不是当前值。)
要保存此值,您应该在提交之前使用编辑器进行保存,即
editor = wmbPreference1.edit();
editor.putFloat("numStars", rating);
editor.commit();
要在onCreate()
中恢复,请执行:
float rating = wmbPreference1.getFloat("numStars", 0f);
ratingBar.setRating(rating);