Autore Topic: Intent che lancia la stessa activity  (Letto 580 volte)

Offline roccia80

  • Utente junior
  • **
  • Post: 89
  • Respect: 0
    • Mostra profilo
Intent che lancia la stessa activity
« il: 16 Ottobre 2010, 09:23:28 CEST »
0
Ciao a tutti!

Questa è la prima activity della mia applicazione:
Codice (Java): [Seleziona]
public class Activity1 extends Activity {
    /** Called when the activity is first created. */
        public static String VALORE_ROOT = "VALORE_ROOT";
        private static int root = 5036609;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        ImageButton startButton = (ImageButton) findViewById(R.id.startButton);
        startButton.setOnClickListener(new OnClickListener() {
                       
                        public void onClick(View v) {
                                Intent intent = new Intent(Activity1.this,Activity2.class);
                                intent.putExtra(VALORE_ROOT, root);
                                startActivity(intent);
                        }
        });
    }
}

Il valore di root viene passato alla seconda activity, dove svolgo tutte le operazioni che mi servono ed elaboro la lista di elementi da visualizzarema. Nel onClick di tali nuove voci mi servirebbe richiamare (per le operazioni che fa e il layout che ha) la stessa activity, passando però un parametro diverso. Al momento ho fatto così:

Codice (Java): [Seleziona]
public class Activity2 extends ListActivity {
       
        public static String VALORE_IDTREE = "VALORE_IDTREE";
        private int val1;
        CustomItem[] listaVoci;
        DataBaseHelper myDbHelper = new DataBaseHelper(this);
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);

        try {
                myDbHelper.createDataBase();
        } catch (IOException ioe) {
                throw new Error("Impossibile creare il database");
        }
        try {
                myDbHelper.openDataBase();
               
                Bundle extras = getIntent().getExtras();
                if(extras.getInt(Activity1.VALORE_ROOT)==0)
                        val1 = extras.getInt(VALORE_IDTREE);
                else
                        val1 = extras.getInt(Activity1.VALORE_ROOT);
                       
                Cursor cursor = myDbHelper.query(DbData.PARENT + " = " + val1, null, DbData.COLUMNS, DbData.SORTSTR);
                listaVoci = new CustomItem[cursor.getCount()];
                int contatore = 0;
                while(cursor.moveToNext()){
                        if(contatore==0)
                                cursor.moveToFirst();
                        CustomItem item = new CustomItem();
                        item.label = cursor.getString(cursor.getColumnIndex(DbData.VOCE));
                        item.id = cursor.getInt(cursor.getColumnIndex(DbData.ID_VOCE));
                        item.hc = cursor.getInt(cursor.getColumnIndex(DbData.HASCHILDS));
                        listaVoci[contatore] = item;
                        contatore++;
                }
                cursor.close();

                setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, createItems(listaVoci)));  
                ListView lv = getListView();  
                lv.setTextFilterEnabled(true);
               
                lv.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                int idtree = createItemsInt(listaVoci)[position];
                                Intent intent = new Intent(Activity2.this,Activity2.class);
                                intent.putExtra(VALORE_IDTREE, idtree);
                                startActivity(intent);
                        }
                });
                myDbHelper.close();
               
        } catch(SQLException sqle) {
                try {
                        throw sqle;
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                myDbHelper.close();
        }
        }
       
        private static class CustomItem {
                public int id;
                public String label;
                public int hc;
        }
       
        private String[] createItems(CustomItem[] obj) {
                String[] items = new String[obj.length];
                for (int i = 0; i < items.length; i++) {
                        items[i] = obj[i].label;
                }
                return items;
        }
       
        private int[] createItemsInt(CustomItem[] obj) {
                int[] items = new int[obj.length];
                for (int i = 0; i < items.length; i++) {
                        items[i] = obj[i].id;
                }
                return items;
        }

E' soluzione applicabile? oppure è sbagliatissima? Consigli per migliorarla?

Grazie
Ciao

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent che lancia la stessa activity
« Risposta #1 il: 16 Ottobre 2010, 14:16:38 CEST »
0
E' soluzione applicabile? oppure è sbagliatissima? Consigli per migliorarla?

Io personalmente non vedo nulla in contrario ad un approccio del genere :)

Offline roccia80

  • Utente junior
  • **
  • Post: 89
  • Respect: 0
    • Mostra profilo
Re:Intent che lancia la stessa activity
« Risposta #2 il: 16 Ottobre 2010, 14:26:41 CEST »
0
Io personalmente non vedo nulla in contrario ad un approccio del genere :)

Grazie per il contributo!