繁体   English   中英

将等级栏评级保存在共享首选项中

[英]Save ratingBar rating in sharedpreferences

大家好:)我一直在研究评级栏,它的工作原理非常好,唯一的问题是用户离开页面或应用程序后它不保存评级。 SO的一位叫Lal的用户帮助了我,我已经完成了所有工作,但似乎仍在做错事。 它的工作方式是在main-activity中有一个listview,当您单击listview行时,它将调用一个新类,该类将加载相应的页面。 在相应的页面上是一个ratingBar。 我没有在mainactivity中调用等级栏,而是在类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()。 我应该为此设置一个字符串吗? 另一个问题是,使用新代码,当我尝试在控制台中重新加载时,我在模拟器中遇到错误,提示启动屏幕无法加载,活动未开始,其当前任务已被置于最前面。 一切似乎都源于上面的共享首选项和最后一行代码。

任何帮助将不胜感激,我已经在此评级栏上停留了一段时间^^,并且真的很想继续前进到应用程序的更多紧迫部分...

要将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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM