ListView

di il
4 risposte

ListView

Ragazzi devo tirar fuori solo il campo "entrata" e solo dell'anno in corso dando la possibilità di eliminare singolarmente ogni record.....Funziona, solo che mi tira fuori anche i record inseriti negli anni precedenti o successivi a quello in corso....
Dov'è il problema??

private void aggiornaEntrate() {
		SQLiteDatabase db = mHelper.getReadableDatabase();
		Cursor c = db.query(true, GiornateTable.TABLE_NAME, new String[] { GiornateTable.ENTRATA }, null, null, null,null, null, null);

		mEntrate.clear();
		while (c.moveToNext()) {
			mEntrate.add(c.getString(0));
		}
		c.close();
		db.close();
	
		ListAdapter adapter = new ArrayAdapter<String>(this,
				R.layout.entrate_list_item, R.id.tv_elenco_entrate, mEntrate){
			
			public View getView(int position, View convertView, android.view.ViewGroup parent) {
				View view = super.getView(position, convertView, parent);
				
				Calendar calendar = Calendar.getInstance();
				int anno = calendar.get(Calendar.YEAR);
				int nMese = calendar.get(Calendar.MONTH)+1;
				String mese;
				if (nMese < 10){
					mese = "0"+nMese;
				} else {
					mese = ""+nMese;
				}
			
				
				SQLiteDatabase db = mHelper.getReadableDatabase();
				String sql = "SELECT Entrata FROM Giornate WHERE "+GiornateTable.DATA+" LIKE '"+anno+"-"+mese+"%' ;";
				Cursor c = db.rawQuery(sql, null);
				
				
				if (c.moveToFirst()){
					//tv_data.setText(""+c.getFloat(1));
					
				}
				db.close();
				return view;
			};
		};
		lvEntrate.setAdapter(adapter);
	}
	
	
	
			
	public void deleteItem(View v) {
		RelativeLayout rl = (RelativeLayout) v.getParent();
		TextView tv = (TextView) rl.findViewById(R.id.tv_elenco_entrate);
		String entrata = tv.getText().toString();

		SQLiteDatabase db = mHelper.getWritableDatabase();
		db.delete(GiornateTable.TABLE_NAME, GiornateTable.ENTRATA + "='"
				+ entrata + "'", null);
		db.close();

		aggiornaEntrate();
	}


}

4 Risposte

  • Re: ListView

    A giudicare da quanto dici il problema sta nella query. Non so se c'entri qualcosa o meno, ma la queri NON deve contenere il punto e virgola alla fine!
  • Re: ListView

    Ok per quello avevo risolto. ..
    ora ho un altro problema e cioè. Con il codice qui sotto butto i risultati in una listview e con delete item permetto di eliminare un singolo record del db, solo che quando viene premuto il pulsante per eliminare vengono eliminati tutti i record 'riposo' e non solo quello effettivamente scelto.
    Considera anche che questo stesso codice lo utilizzo in altre activity (per eliminare singolarmente entrate/uscite e tutto funziona alla perfezione)
    
    private void showDetails(String anno){
    		SQLiteDatabase db = new BilancioHelper(this).getReadableDatabase();
    		final List<Dettaglio> dettagli = new ArrayList<Eriposo.Dettaglio>(12);
    		
    		for (int i=1; i<=12; i++){
    			String mese;
    			if (i<10){
    				mese = "0"+i;
    			} else {
    				mese = ""+i;
    			}
    			String sql = "SELECT Data,Riposo FROM Giornate WHERE riposo>=1 AND data LIKE '"+anno+"-"+mese+"%' ORDER BY data DESC";
    			Cursor c = db.rawQuery(sql, null);
    			
    			while (c.moveToNext()){
    				Dettaglio d = new Dettaglio();
    				d.data = c.getString(0);
    				d.riposo = c.getInt(1);
    				//d.risparmio = c.getFloat(2);
    				
    				dettagli.add(d);
    			}
    			c.close();
    		}
    		
    		db.close();
    		
    		ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.dettaglio_row_riposo, R.id.tv_riposo_dettaglio, dettagli){
    			
    			@Override
    			public View getView(int position, View convertView, ViewGroup parent) {
    				View row = super.getView(position, convertView, parent);
    				
    				Log.v("Bilancio", "Creo elemento in posizione "+position);
    				
    				TextView tvData, tvRiposo;
    				tvData = (TextView) row.findViewById(R.id.tv_data_riposo);
    				//tvData.setTextColor(Color.YELLOW);
    				
    				tvRiposo = (TextView) row.findViewById(R.id.tv_riposo_dettaglio);
    				//tvRiposo.setTextColor(Color.RED);
    				
    				
    				
    				Dettaglio d = dettagli.get(position);
    				tvData.setText(d.data+"");
    				tvRiposo.setText(d.riposo+"");
    				return row;
    			}
    		};
    		lista.setAdapter(adapter);
    		
    		
    		}
    //////////////////////////////////////////////////////////////////////////////////
    public void deleteItem(View v) {
    		RelativeLayout rl = (RelativeLayout) v.getParent();
    		TextView tv = (TextView) rl.findViewById(R.id.tv_riposo_dettaglio);
    		String riposo = tv.getText().toString();
    
    		SQLiteDatabase db = mHelper.getWritableDatabase();
    		db.delete(GiornateTable.TABLE_NAME, GiornateTable.RIPOSO + "='" + riposo + "'", null);
    		db.close();
    
    		finish();
    		startActivity(getIntent());
    		
    	}
    
  • Re: ListView

    Il campo riposo è una stringa? Non mi ricordo..
    Prova a stampare due cose: la query che fai (quindi quanto vale riposo) e il risultato della delete.
    Se non ti da alcun errore allora sicuramente è la query che è sbagliata!
  • Re: ListView

    Si è una stringa. In pratica in ingresso dò la data (che sarebbe la data del giorno di riposo) e nel campo riposo vine inserito sempre il valore 1.
    Ho fatto una prova e cioè: se nel stesso giorno, es: il 2013-06-06 inserisco più giorni di riposo, quindi il campo riposo non è più 1 ma 2,3,ecc... allora quando lancio la funzione delete viene eliminato solamente il record scelto, se invece ho un elenco con diverse date ma il giono di riposo è sempre uguale a 1 vengono eliminati tutti....Pensi che sia un errore nella query? o nella funzione delete??
Devi accedere o registrarti per scrivere nel forum
4 risposte