Autore Topic: Aggiornare lista da db  (Letto 431 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Aggiornare lista da db
« il: 08 Maggio 2012, 15:31:31 CEST »
0
Ho una lista che prende dati dal db. Quando però lancio un'altra activity voglio che dopo, tornando alla prima activity, la lista sia aggiornata.

So che devo gestire il tutto in onResume ma non riesco a risolverlo perchè mi ripete le righe. Come devo fare? Ecco il codice:

Codice (Java): [Seleziona]
public class WorkflowChoice extends Activity {
       
        private static final int INIT_JADE_PROFILE = 0;
        private static final int CREATE_WORKFLOW = 1;
        private static final int REMOVE_WORKFLOW = 2;
        private static final int MODIFY_FILES = 3;
        private static final int CHANGE_THEME = 4;
        private static final int SHOW_OUTPUT_WORKFLOW = 5;
        private LinearLayout properties_container;
       
       
        private MyDatabase db;
        TextView wfsTv;
       

        @Override
        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.choice);
               
                properties_container = (LinearLayout ) findViewById(R.id.properties_container);
               
                String host = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_host), getString(R.string.default_host));
                String port = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_port), getString(R.string.default_port));
               
                wfsTv=(TextView)findViewById(R.id.wfsTv);
                ListView wfsLv = (ListView)findViewById(R.id.wfsLv);
               
                db=new MyDatabase(getApplicationContext());
        db.open();  //apriamo il db
       
       
        if(db.fetchWfs().getCount()==0){//inserimento dati, solo se il db è vuoto
       
                db.insertWf("WF1", "class1");
                db.insertWf("WF2", "class2");
                db.insertWf("WF3", "class3");
                db.insertWf("WF4", "class4");
                db.insertWf("WF5", "class5");
       
        }
 
        Cursor c=db.fetchWfs(); // query
        startManagingCursor(c);
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.wfs, //il layout di ogni riga/prodotto
                        c,
                        new String[]{MyDatabase.WfMetaData.ID,MyDatabase.WfMetaData.WF_NAME_KEY,MyDatabase.WfMetaData.WF_CLASS_KEY},//questi colonne
                        new int[]{R.id.IDTv,R.id.nameTv,R.id.classTv});//in queste views
       
        wfsLv.setAdapter(adapter); //la listview ha questo adapter
       
       
        //qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview
       
        int nameCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_NAME_KEY);  //indici delle colonne
        int classCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_CLASS_KEY);      
       
        if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                do {
                               
                        wfsTv.append("Wf Name:"+c.getString(nameCol)+", Class:"+c.getString(classCol)+"\n"); //estrazione dei dati dalla entry del cursor
                                       
                        } while (c.moveToNext());//iteriamo al prossimo elemento
        }
       
        db.close();
        getWindow().setFormat(PixelFormat.RGBA_8888);   //visto che usiamo i gradient, usiamo questo trick (vedi snippet forum)
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);  
       
        //wfsLv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
        //wfsTv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
        //definizione ed uso di gradient in modo programmatico
       
       
        //animazioni in modo programmatico (vedi snippet forum)
        Animation a1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        a1.setDuration(1000);
        a1.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
        wfsLv.startAnimation(a1);
        //entra da sotto
       
       
        Animation a2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        a2.setDuration(1000);
        a2.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
        wfsTv.startAnimation(a2);
        //entra da sopra
     
               
       
                TextView masterTv = (TextView)findViewById(R.id.masterTv);
                masterTv.setText("Master");
                masterTv.setOnClickListener(new View.OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                startSubActivity();
                               
                        }
                });
        }
        private void startSubActivity(){
        Intent intent = new Intent(this, ConfigChoice.class);
        startActivity(intent);
        }
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                menu.add(0, INIT_JADE_PROFILE, 0, getString(R.string.config));
                menu.add(0, CREATE_WORKFLOW, 0, getString(R.string.create));
                menu.add(0, REMOVE_WORKFLOW, 0, getString(R.string.remove));
                menu.add(0, MODIFY_FILES, 0, getString(R.string.modify_files));
                menu.add(0, CHANGE_THEME, 0, getString(R.string.change_theme));
                //menu.add(0, SHOW_OUTPUT_WORKFLOW, 0, getString(R.string.show_output));
               
                return super.onCreateOptionsMenu(menu);
        }
       
        @Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
                switch (item.getItemId()) {
                case INIT_JADE_PROFILE:
                        startActivity(new Intent(WorkflowChoice.this, InitJadeProperties.class));
                        break;
                case CREATE_WORKFLOW:
                        startActivity(new Intent(WorkflowChoice.this, CreateWorkflow.class));
                        break;
                case REMOVE_WORKFLOW:
                        startActivity(new Intent(WorkflowChoice.this, RemoveWorkflow.class));
                        break;
                case MODIFY_FILES:
                        startActivity(new Intent(WorkflowChoice.this, ModifyFiles.class));
                        break;
                case CHANGE_THEME:
                        WadeAndroidClient.changeTheme();
                /*case SHOW_OUTPUT_WORKFLOW:
                        if(xmlOut!=null){
                                startActivity(new Intent(WorkflowChoice.this,
                                        OutputViewerActivity.class).putExtra(
                                        OutputViewerActivity.OUTPUT_KEY, xmlOut));
                        }
                        break;*/

                default:
                        break;
                }
                return super.onMenuItemSelected(featureId, item);
        }
       
        public void addToDB(String name, String cls){
                db.insertWf(name, cls);
        }
        @Override
        protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();
               
        }

}

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Aggiornare lista da db
« Risposta #1 il: 08 Maggio 2012, 16:17:41 CEST »
0
In che modo ti ripete le righe? Nell'onResume devi mettere il codice per crearti l'adapter e fare il setadapter alla lista

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Aggiornare lista da db
« Risposta #2 il: 08 Maggio 2012, 16:48:12 CEST »
0
Cioè quale codice devo mettere nell'onResume?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Aggiornare lista da db
« Risposta #3 il: 08 Maggio 2012, 16:50:27 CEST »
0
Quello che utilizzi per ricavarti i dati dal database e crearti l'oggetto adapter ed infine il setadapter

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Aggiornare lista da db
« Risposta #4 il: 08 Maggio 2012, 16:56:17 CEST »
0
Codice (Java): [Seleziona]
Cursor c=db.fetchWfs(); // query
        startManagingCursor(c);
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.wfs, //il layout di ogni riga/prodotto
                        c,
                        new String[]{MyDatabase.WfMetaData.ID,MyDatabase.WfMetaData.WF_NAME_KEY,MyDatabase.WfMetaData.WF_CLASS_KEY},//questi colonne
                        new int[]{R.id.IDTv,R.id.nameTv,R.id.classTv});//in queste views
       
        wfsLv.setAdapter(adapter); //la listview ha questo adapter
       
       
        //qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview
       
        int nameCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_NAME_KEY);  //indici delle colonne
        int classCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_CLASS_KEY);      
       
        if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                do {
                               
                        wfsTv.append("Wf Name:"+c.getString(nameCol)+", Class:"+c.getString(classCol)+"\n"); //estrazione dei dati dalla entry del cursor
                                       
                        } while (c.moveToNext());//iteriamo al prossimo elemento
        }

Ho provato a mettere nell'onResume questo codice ed a commentarlo nel onCreate ma mi da errore!