Formatowanie danych przed przekazaniem do SimpleCursorAdapter

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/questions/7306448/geting-value-from-contextmenu-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

0

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/questions/4776936/modifying-simplecursoradapter-data

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