2012-03-21 3 views
0

Je suis nouveau à la programmation Android et Java. J'ai une classe qui implémente un adaptateur de curseur personnalisé. Le problème est que je dois être en mesure d'accéder à certaines informations de l'adaptateur de curseur dans un écouteur. Voir ci-dessous:RatingBars et auditeurs dans Android

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; 
     } 
    } 

Merci beaucoup.

Répondre

1

Définir comme un tag pour la RatingBar la KEY_ROWID avant d'entrer dans l'auditeur, puis dans l'auditeur récupérer la balise et l'utiliser sur le curseur:

//... 
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 
       } 

      }  

//... 
2

Faites votre finale du curseur comme celui-ci: finale curseur curseur

public void bindView(View view, Context context, final Cursor cursor) 
+0

Nous vous remercions de votre aide. Je me demandais simplement si le fait d'avoir à faire cela indique une mauvaise conception ou est en train de changer en finale généralement nécessaire dans cette situation? – Mewzer

+0

Votre classe interne (OnRatingBarChangeListener) ne peut pas obtenir de variables non finales, donc Oui c'est "généralement nécessaire". Marquer comme résolu s'il vous plaît. –