2010-08-13 3 views
0

Je viens de commencer le développement Android et je l'adore jusqu'à maintenant. Pour obtenir une certaine expérience, j'écris une petite application todo. Dans ma base de données , j'ai un état pour un élément todo, représenté par int. J'utilise une case à cocher dans une vue en liste pour représenter cet état. Pour lier les données à la vue, j'utilise une sous-classe de SimpleCursorAdapter. J'ajoute un onClickListener à la case à cocher qui met à jour l'état dans la base de données pour l'élément de liste utilisé. Le problème est, si j'utilise le code suivant, la liste est vissé dans l'affichage (de nombreux articles seront vérifiés):Android SimpleCursorAdapter et mise à jour de la base de données

@Override 
public View getView(final int pos, View inView, ViewGroup parent) { 
    View view = inView; 
    if (view == null) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.toodoolist_item, null); 
    } 
    cursor.moveToPosition(pos); 
    ... 

    checkBox.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     int state = 0; 
     if (checkBox.isChecked()) { 
     titleView.setPaintFlags(titleView.getPaintFlags() 
      | Paint.STRIKE_THRU_TEXT_FLAG); 
     titleView.setEnabled(false); 
     state = 1; 
    } else { 
     titleView.setPaintFlags(titleView.getPaintFlags() 
      ^Paint.STRIKE_THRU_TEXT_FLAG); 
     titleView.setEnabled(true); 
    } 

    ContentValues values = new ContentValues(); 
    values.put(TooDooTable.STATE, state); 
    context.getContentResolver() 
     .update(ContentUris.withAppendedId(
    TooDooTable.CONTENT_URI, id), values, null, null); 
    cursor.requery(); 
    } 
} 

Ma solution actuelle est d'utiliser le gonfleur chaque fois, même si le inView n'est pas null:

@Override 
public View getView(final int pos, View inView, ViewGroup parent) { 
    View view = inView; 
    LayoutInflater inflater = (LayoutInflater) context 
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.toodoolist_item, null); 
    ... 

Cela fonctionne, mais je ne comprends pas pourquoi je dois faire ce hack.

Quelle serait la meilleure pratique pour mettre à jour la base de données dans un CurserAdapter et obtenir les modifications reflétées immédiatement dans la vue?

Merci

Kai

Répondre

Questions connexes