'refresh' Activity

di Anonimizzato11099 il
9 risposte
Ciao a tutti in una activity inserisco i dati nel db, e nella main visualizzo il risultato di una query.
in pratica per visualizzare il risultato della query devo chiudere e riaprire l'app. Esiste un metodo per fare una specie di refresh quando dalla seconda activity torno alla main??

9 Risposte

  • Dovresti provare a mettere nell' onResume la logica per rifare la query ed aggiornare la view..
  • Perfetto con onResume() quando passo da una activity all'altra
    Non funziona però se nella main inserisco un dato senza cambiare activity es.tramite datepick
  • In quel caso devi gestire manualmente tramite ascoltatori o simili (vedi il pattern observer).. Ad esempio nel caso del datepicker c'è il relativo OnDateChangedListener (con il quale devi stare attento perché viene chiamato 2 volte, non so se è un bug o meno)..
  • Ok
  • Ho un problema con double, in pratica se ad esempio in ingresso inserisco il valore 1000.30 con questo codice ho come uscita questo 1000.2999877929688
    come posso risolvere??ci stoò impazzendo!!
    
    private class Dettaglio {
            
            public double entrate, uscite;
            
        }
    
    private void showDetails(String anno){
            SQLiteDatabase db = new BilancioHelper(this).getReadableDatabase();
            final List<Dettaglio> dettagli = new ArrayList<Bilancio.Dettaglio>(12);
            
            for (int i=1; i<=12; i++){
                String mese;
                if (i<10){
                    mese = "0"+i;
                } else {
                    mese = ""+i;
                }
                String sql = "SELECT SUM(Entrata), SUM(Uscita) FROM Giornate WHERE data LIKE '"+anno+"-"+mese+"%'";
                Cursor c = db.rawQuery(sql, null);
                
                while (c.moveToNext()){
                    Dettaglio d = new Dettaglio();
                    d.entrate = c.getFloat(0);
                    d.uscite = c.getFloat(1);
                    
                    dettagli.add(d);
                }
                c.close();
            }
            
            db.close();
            
            ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.dettaglio_row, R.id.tv_mese, 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);
                    
                    String month = new DateFormatSymbols(Locale.getDefault()).getMonths()[position];
                    TextView tvMonth = (TextView) row.findViewById(R.id.tv_mese);
                    tvMonth.setText(month);
                    
                    TextView tvEntrate, tvUscite;
                    tvEntrate = (TextView) row.findViewById(R.id.tv_entrata);
                    tvUscite = (TextView) row.findViewById(R.id.tv_uscita);
                    Dettaglio d = dettagli.get(position);
                    tvEntrate.setText(d.entrate+"");
                    tvUscite.setText(d.uscite+"");
                    return row;
                }
            };
            lista.setAdapter(adapter);
            
            //Calcolo il totale annuale
            double totaleE = 0d, totaleU = 0d;
            for (Dettaglio d : dettagli){
                totaleE += d.entrate;
                totaleU += d.uscite;
            }
            
            TextView riepilogoE = (TextView) findViewById(R.id.tv_riepilogo_entrate);
            TextView riepilogoU = (TextView) findViewById(R.id.tv_riepilogo_uscite);
            
            riepilogoE.setText(""+totaleE);
            riepilogoU.setText(""+totaleU);
        }
        
        private List<String> ottieniAnni(){
            List<String> result = new LinkedList<String>();
            
            SQLiteDatabase db = new BilancioHelper(this).getReadableDatabase();
            
            String sql = "SELECT DISTINCT strftime('%Y',"+GiornateTable.DATA+") FROM "+GiornateTable.TABLE_NAME;
            Cursor c = db.rawQuery(sql, null);
            
            while (c.moveToNext()){
                result.add(c.getString(0));
            }
            db.close();
            return result;
        }
    
  • È un problema dovuto al fatto che il numero di bit usati per la rappresentazione è finito. Evidentemente quel numero è quello che più si avvicina a ciò che vorresti te! Non penso che tu possa farci tanto purtroppo..
  • Infatti leggendo in rete mi sembrava così, ma te l'ho chiesto perchè magari avevi qualche soluzione particolare...
    Ora non mi resta che togliere double e far uscire un numero intero per evitare questo giusto??
    ho provato a modificare quella parte di codice ma senza risultato....posso semplicemente sostituire double con int??
  • kontos02 ha scritto:


    Infatti leggendo in rete mi sembrava così, ma te l'ho chiesto perchè magari avevi qualche soluzione particolare...
    Ora non mi resta che togliere double e far uscire un numero intero per evitare questo giusto??
    ho provato a modificare quella parte di codice ma senza risultato....posso semplicemente sostituire double con int??
    non puoi formattare il double a x cifre? in quel caso non dovresti avere problemi
  • Si, puoi formattarlo come suggerisce zak.. prova con
    
    double numero = 1000.2999877929688D;
    DecimalFormat df = new DecimalFormat("#.##");
    String numFormattato = df.format(numero).toString();
    
    A questo punto dovrebbe uscirti il numero correttamente formattato (in teoria anche arrotondato al decimale più vicino).
Devi accedere o registrarti per scrivere nel forum
9 risposte