0

a のいくつかのビュー項目 ( aおよび a ) をviaのいくつかの列にCursorAdapterバインドするカスタムを作成しました。TextViewRatingBarListViewSQL databasebindView()

public class MyCursorAdapter extends CursorAdapter {
    ...

    public void bindView(View view, Context context, final Cursor cursor) {
        TextView name = (TextView)view.findViewById(R.id.name);
        name.setText(cursor.getString(cursor.getColumnIndex(MyDbAdapter.KEY_NAME)));
        RatingBar rating = (RatingBar)view.findViewById(R.id.life_bar_rating);
        rating.setRating(cursor.getFloat(cursor.getColumnIndex(MyDbAdapter.KEY_RATING_VALUE)));
    }

    ...
}

すべてのRatingBar評価値の絶対最新バージョンを取得して、databaseそれに応じて (一度に) 更新できるようにしたいです。最初は で を使用しようとしていcursorましたが、最新のユーザーの変更ではなく、 に保存されている値だけが含まれているCursorAdapterことに気付きました。cursordatabase

ListViewどうにかして実際のビューを反復処理する必要があると推測しています-新しい評価バーの評価値をすべて取得するには、どのように反復処理しますか?

4

2 に答える 2

1

Cursor finalで作成しonBindView()、フィールドを作成することもできHashMap<id, rating> mRatings;ますCursorAdapter

public class MyCursorAdapter extends CursorAdapter implements RatingBar.OnRatingBarChangeListener {

    public void bindView(View view, Context context, final Cursor cursor) {
        ...
        rating.setTag(cursor.getPosition());
        rating.setOnRatingBarChangeListener(this);
        ...
    }

    @Override
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromTouch) {
        Integer position = (Integer) ratingBar.getTag();
        Cursor c = getCursor();
        c.move(position);
        int id = cursor.get id;
        mRatings.add(id, rating);
    }

その後、変更された評価を 1 回のトランザクションでトラバースmRatingsして更新します。

于 2012-07-31T13:27:01.243 に答える
1

が呼び出さbindView()れると、DB から値を取得してRatingBar.

したがって、ユーザーが値を変更すると、各評価バーの DB を個別に更新する必要があります。

したがって、を設定する必要がありますOnRatinBarChangedListener

rating.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
    public void onRatingChanged(RatingBar ratingBar, float rating,
        boolean fromUser) {

        if(fromUser){
             //update value here
        }                     

    }
});

すべての呼び出しでリスナーをトリガーしないように、変更がfromUserであるかどうかを確認していることに注意してください。bindView()

于 2012-07-31T13:17:27.527 に答える