我有一个 ListView,其中每一行包含一个 CheckBox、一个 TextView 和一个 RatingBar。我还有一个数据库,用于存储唯一的文本、浮点数的评级和其他与此处无关的信息。
每次我启动我的应用程序时,它都会从数据库中收集信息并将其显示在 ListView 上就好了。除了 RatingBar。当用户更改 RatingBar 的评级时,我想将新值保存在数据库中,以便以后可以将其与存储在数据库中的其余信息一起使用。但问题是这个值没有正确保存,我不知道为什么,所以这个值没有正确显示,甚至显示在错误的行中。
我尝试了一些在本网站上找到的代码,但无法使其正常工作。
这是我自定义的 ArrayAdapter 的 getView:
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
FilaLlistaHolder holder = null;
if(row == null) {
LayoutInflater inflater = ((SeriesDBActivity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new FilaLlistaHolder();
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.rating = (RatingBar)row.findViewById(R.id.ratingBar1);
holder.checkbox = (CheckBox)row.findViewById(R.id.checkBox1);
row.setTag(holder);
if (holder.rating != null) {
holder.rating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar,
float rating, boolean fromUser) {
if (fromUser) {
data[position].stars = rating;
FilaLlista filaLlista = data[position];
bd.openToWrite();
bd.saveRating(filaLlista.titol, rating);
bd.close();
}
}
});
holder.rating.setRating(data[position].stars);
}
}
else
holder = (FilaLlistaHolder)row.getTag();
FilaLlista filaLlista = data[position];
holder.txtTitle.setText(filaLlista.titol);
holder.rating.setRating(filaLlista.stars);
return row;
}
如您所见,我有一个 setOnRatingBarChangeListener 调用数据库来更新已更改其评级的行。我会说更新调用是正确的。
在此先感谢您的帮助。