各行が CheckBox、TextView、RatingBar で構成される ListView があります。また、一意のテキスト、フロートとしての評価、およびここでは関係のないその他の情報を格納するデータベースもあります。
アプリケーションを起動するたびに、データベースから情報が収集され、ListView に表示されます。評価バーのほかに。ユーザーが 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 があります。そして、更新呼び出しは正しいと思います。
よろしくお願いします。