Formatowanie danych przed przekazaniem do SimpleCursorAdapter

Odpowiedz Nowy wątek
2011-09-05 15:23
0

Siedzę nad tym od jakiegoś czasu. Pobieram z tabeli dane do wielokolumnowego ListView. Mam ContextMenu które po kliknieciu na elemencie listy pobiera jego id, tak bym mógł je wykorzystać w metodzie usuwajacej rekord z bazy.

Wszystko działa, jednak taki sposób umożliwia mi jedynie pobranie dokładnych wartości poszczególnych rekordów i przekazanie ich do ListView. Ja zaś szukam sposobu na pobranie ich z bazy, przeformatowanie i dopiero przekazanie do listy.

Próbowałem następującego rozwiązania z użyciem CursorAdapter (może to kogoś naprowadzi na właściwy tor):

    private void fillData() {       
 
        ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
 
        Cursor itemCursor = db.fetchAllItemsInExpenses();       
 
        if (itemCursor.moveToFirst()){
            do{
                String sCategory = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_CATEGORY));
                String sDate = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_DATE));
                String sValue = itemCursor.getString(itemCursor.getColumnIndex(db.EXPENSE_VALUE));
 
                map = new HashMap<String, String>();
                map.put(db.EXPENSE_CATEGORY, sCategory);
                map.put(db.EXPENSE_DATE, sDate);
                map.put(db.EXPENSE_VALUE, sValue);
                myList.add(map);                
 
            }while (itemCursor.moveToNext());           
        }
 
        SimpleAdapter expensesList = new SimpleAdapter(this, myList, R.layout.expenses_list_item, 
                new String[] {db.EXPENSE_CATEGORY, db.EXPENSE_DATE, db.EXPENSE_VALUE}, 
                new int[] {R.id.expense_category, R.id.expense_date, R.id.expense_value});
        setListAdapter(expensesList);
        //list.setAdapter(expensesList);        
 
    }
    public Cursor fetchAllItemsInExpenses() {
        return SQLDb.rawQuery("SELECT " + KEY_ROWID +"," + EXPENSE_CATEGORY + "," + EXPENSE_DATE + "," + EXPENSE_VALUE + " FROM " + TABLE_EXPENSES , null);
        }

To jednak nie pozwala mi na pobranie wartości id w momencie na kliknieciu w context menu, tak jak to robiłem w przypadku użycia SimpleCursorAdapter czyli:

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
        //case R.id.expense_revalue:    
        //  return true;
        case R.id.expense_delete:   
 
            db.deleteItem(db.TABLE_EXPENSES, info.id);
            fillData();         
            return true;
        }       
        return super.onContextItemSelected(item);
    }

Prowadzę wątek na stackoverflow http://stackoverflow.com/ques[...]xtmenu-item-database-involved

Ktoś zasugerował, że da się mimo wszystko zastosować SimpleCursorAdapter w połączeniu z BindView()... przegryzam się teraz przez dokumentacje, gdyby ktoś jednak miał fragment kodu z użyciem tych metod byłbym wdzięczny

edytowany 2x, ostatnio: JacekKw, 2011-09-05 15:33

Pozostało 580 znaków

2011-09-05 17:12

Kolejne godziny poszukiwań doprowadziły mnie do rozwiązania tego problemu. Sugestia ze stackoverflow okazała się słuszna.

Tutaj coś stanowi rozwiązanie: http://stackoverflow.com/ques[...]ying-simplecursoradapter-data

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0