РейтингБаров и слушателей в Android - PullRequest
0 голосов
/ 21 марта 2012

Я новичок в программировании на Android и Java.У меня есть класс, который реализует пользовательский адаптер курсора.Проблема в том, что мне нужно иметь доступ к некоторой информации в адаптере курсора в слушателе.См. Ниже:

    public class MyCursorAdapter extends CursorAdapter{  
        public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
            super(context, c);
        }

        public void bindView(View view, Context context, Cursor cursor) {
            TextView ratingBarName = (TextView)view.findViewById(R.id.ratingbar_name);
            ratingBarName.setText(cursor.getString(
                cursor.getColumnIndex(MyDbAdapter.KEY_NAME)));

            RatingBar ratingBar = (RatingBar)view.findViewById(R.id.ratingbar);
            ratingBar.setRating(cursor.getFloat(
                cursor.getColumnIndex(MyDbAdapter.KEY_RATING)));


            RatingBar.OnRatingBarChangeListener barListener = 
                new RatingBar.OnRatingBarChangeListener() {
                public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromTouch) {
                    MyDbAdapter db = MyActivity.this.getDbHelper();

                    // NEED ACCESS TO CURSOR HERE SO I CAN DO:
                    // cursor.getColumnIndex(MyDbAdapter.KEY_ROWID);
                    // AND THEN USE THE ROW ID TO SAVE THE RATING IN THE DB
                    // HOW DO I DO THIS?
                }

            }               
            ratingBar.setOnRatingBarChangeListener(barListener);
       }

       public View newView(Context context, Cursor cursor, ViewGroup parent) {
           LayoutInflater inflater = LayoutInflater.from(context);
           View view = inflater.inflate(R.layout.ratingrow, parent, false);
           bindView(view, context, cursor);
           return view;
       }
   }

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Сделайте ваш курсор окончательным, как это: final Курсорный курсор

 public void bindView(View view, Context context, final Cursor cursor)
1 голос
/ 21 марта 2012

Установите в качестве тега для RatingBar KEY_ROWID перед тем, как вводить его в прослушиватель, а затем в прослушиватель, извлечь тег и использовать его на курсоре:

//...
ratingBar.setRating(cursor.getFloat(cursor.getColumnIndex(MyDbAdapter.KEY_RATING)));
ratingBar.setTag(new Long(cursor.getLong(MyDbAdapter.KEY_ROWID)));
RatingBar.OnRatingBarChangeListener barListener = 
                new RatingBar.OnRatingBarChangeListener() {
                public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromTouch) {
                    MyDbAdapter db = MyActivity.this.getDbHelper();                       
                    long theIdYouWant = (Long) ratingBar.getTag();                    
                    //use the id 
                }

            }    

//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...