2010-07-23 3 views
0

J'ai un CursorAdapter personnalisé qui prend des éléments d'une base de données et de les afficher dans un listview. Si possible, je voudrais afficher seulement certains éléments basés sur une certaine valeur booléenne dans un élément de base de données. Voici quelque chose de semblable à ce que je voudrais faire:Comment afficher uniquement des éléments spécifiques dans un CursorAdapter

package itp.uts.program; 

import android.content.Context; 
import android.database.Cursor; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CursorAdapter; 
import android.widget.TextView; 
//Adapter tests if an element is read or unread, and bolds the items that are unread 
public class BoldAdapter extends CursorAdapter{ 

private final LayoutInflater mInflater; 
public BoldAdapter(Context context, Cursor c, boolean autoRequery) { 
    super(context, c, autoRequery); 
    mInflater = LayoutInflater.from(context); 
} 
public BoldAdapter(Context context, Cursor c) { 
    super(context, c); 
    mInflater = LayoutInflater.from(context); 
} 
@Override 
public void bindView(View view, Context context, Cursor cursor) { 

} 
@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    //Creates a view to display the items in 
    final View view = mInflater.inflate(R.layout.notes_row, parent, false); 
    TextView textRequestNo = (TextView) view.findViewById(R.id.text1); 
    TextView textMessage = (TextView) view.findViewById(R.id.text2); 
    StringBuilder requestNo = new StringBuilder(cursor.getString(cursor 
      .getColumnIndex("requestNo"))); 
    StringBuilder message = new StringBuilder(cursor.getString(cursor 
      .getColumnIndex("Message"))); 

    //Sets the text fields as elements from the database 
    textRequestNo.setText(requestNo); 
    textMessage.setText(message); 

    if (cursor.getString(cursor.getColumnIndex("Read")).equals("true")) 
    {//Tests if the item is unread 
     **//DO NOT SHOW THE ELEMENT, HOW DO I DO THIS?** 
    } 

    return view; 
} 

}

Répondre

2

Idéalement, vous filtrez simplement les lignes que vous n » Je veux dans votre requête de base de données.

Si, pour une raison quelconque, ce n'est pas possible, créer un adaptateur d'emballage qui filtre les lignes que vous ne voulez pas. Voici une classe de base AdapterWrapper que vous pouvez utiliser pour vous aider.

+0

N'a même pas pensé à cela, merci. Qu'est-ce que je demanderais exactement pour. Je ne l'ai jamais vraiment traité de base de données avant l'interrogation, et seulement savoir que je changerais un paramètre dans cet appel: retour mDb.query (DATABASE_TABLE, new String [] {KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_BODY1, KEY_BODY2, KEY_BODY3, KEY_BODY4, KEY_BODY5}, null, null, null, null, null); – mbauer14

+0

@ mbauer14: C'est vraiment impossible de répondre, puisque je n'ai pas créé votre schéma de base de données. Vous avez vraiment besoin de passer du temps à apprendre le langage SQL avant de créer des applications Android qui utilisent SQLite. Pardon! – CommonsWare

+0

Ouais je fais vraiment, je viens d'essayer d'apprendre que je vais, mais avec des bases de données, il semble que ce travail ne fonctionne tout simplement pas. Dire que je veux retourner comme un curseur tous les éléments où KEY_BODY3 est faux, est-ce une opération simple ou dois-je juste lire plus? Merci – mbauer14

0

juste retourner une vue et mettre sa propriété de visibilité à VIEW.GONE

+4

Cela rend l'élément réel disparaît, mais laisse un espace vide où l'élément serait dans la liste. – mbauer14