Autore Topic: Custom CursorAdapter  (Letto 2138 volte)

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Custom CursorAdapter
« il: 03 Marzo 2011, 16:44:07 CET »
0
Prendendo spunto da qua http://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/ e modificandolo un po' ho tirato fuori questo Custom CursorAdapter

Codice (Java): [Seleziona]
public class ContactListCursorAdapter extends SimpleCursorAdapter implements Filterable {

    private Context context;
    private int layout;
    private Cursor c;

    public ContactListCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
        this.context = context;
        this.layout = layout;
        this.c = c;
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        final LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(layout, parent, false);
        /*
        String name;
        name = c.getString(c.getColumnIndex("NAME"))+" - ";
        name += c.getString(c.getColumnIndex("NUMBER"));

        TextView name_text = (TextView) v.findViewById(R.id.name_entry);
        if (name_text != null) {
            name_text.setText(name);
        }
        */

        return v;
    }

    @Override
    public void bindView(View v, Context context, Cursor c) {
        String name;
        name = c.getString(c.getColumnIndex("NAME"))+" - ";
        name += c.getString(c.getColumnIndex("NUMBER"));
        TextView name_text = (TextView) v.findViewById(R.id.name_entry);
        if (name_text != null) {
            name_text.setText(name);
        }
    }
}

Con questa Activity che lo utilizza

Codice (Java): [Seleziona]
public class Main extends ListActivity {
       
        private DbAdapter mDbHelper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          mDbHelper = new DbAdapter(this);
          mDbHelper.open();
          //creazione cursore da DB
          Cursor cursor = mDbHelper.fetchAllContacts();
          startManagingCursor(cursor);
         
          String[] columns = new String[] {"NAME"};
          int[] to = new int[] { R.id.name_entry };

          setListAdapter( new ContactListCursorAdapter(this, R.layout.rows, cursor, columns, to));
    }
   
}      

Funziona però ho qualche dubbio:

1. Se io aggiorno la base dati come faccio ad aggiornare anche la vista?
2. Al CursorAdapter devo per forza passare i valori "String[] from, int[] to" anche se poi non li utilizzo?
3. Nell'esempio trovato sia nel metodo "newView" che nel metodo "bindView" sono popolati le textview, ma siccome il bindView mi pare venga sempre richiamato dopo il newView è necessario? A me funziona anche togliendo questa operazione dal NewView.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Custom CursorAdapter
« Risposta #1 il: 03 Marzo 2011, 19:18:26 CET »
0
1. Se io aggiorno la base dati come faccio ad aggiornare anche la vista?

Devi chiamare il metodo .requery() del cursor che gli passi

Citazione
2. Al CursorAdapter devo per forza passare i valori "String[] from, int[] to" anche se poi non li utilizzo?

Hai provato a ereditare da CursorAdapter invece che SimpleCursorAdapter? Il primo infatti ha anche un costruttore che prevede solo Context e Cursor :)

Citazione
3. Nell'esempio trovato sia nel metodo "newView" che nel metodo "bindView" sono popolati le textview, ma siccome il bindView mi pare venga sempre richiamato dopo il newView è necessario? A me funziona anche togliendo questa operazione dal NewView.

nel primo giustamente fai l'inflate della view e nel secondo fai il bind dei dati. Non ti devi preoccupare di recycling & co. Direi che è corretto così ;)

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Re:Custom CursorAdapter
« Risposta #2 il: 04 Marzo 2011, 10:23:28 CET »
0
Perfetto, tutti e 3 i punti ok, sono riuscito anche a fare le righe di colori alternati, grazie mille :-)