Autore Topic: Accedere ad una nuova activity portandosi dietro un ID  (Letto 1322 volte)

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Accedere ad una nuova activity portandosi dietro un ID
« il: 16 Ottobre 2012, 20:07:16 CEST »
0
Ciao a tutti,
sono nuovo in tutti i sensi, sia del forum che del mondo android.
spero di aver inserito un oggetto adatto e che possiate aiutarmi nonostante la mia inseperienza.

sto creando (cercando di creare per esser corretti) un app che funzioni piu o meno come un'agenda per salvare dei dati anagrafici e che ad ogni anagrafica possa associarvi ulteriori dati.

la prima parte, ovvero creazione, modifica, lista e cancellazione delle anagrafiche principali sono riuscito a farla (non con pochi problemi purtroppo)

ora vorrei aggiungere le "anagrafiche secondarie".
in pratica all'evento onClick della mia listView vorrei richiamare una seconda activity portandomi dietro i dati relativi all'anagrafica appena cliccata e avere nella parte superiore dello schermo il nominativo cliccato(per ricordarmi cosa sto gestendo)
in modo tale che le "anagrafiche" secondarie siano associate per ID a quella principale.

un esempio di applicazione del genere potrebbe essere una prima activity per creare  le anagrafiche delle pizzerie, al click far partire una seconda activity che mi permette di  creare e associare le pizze o creare e associare le bibite etcc.

prima l'evento onClick era usato per modificare l'anagrafica, ma ora l'ho sostituito con onCreateContextMenu

vorrei chiedervi quindi un consiglio su come potermi muovere per realizzare questo progetto, sempre che sia riuscito a spiegarmi.

grazie in anticipo per gli eventuali aiuti /suggerimenti


questo è l'onclick che usavo, lo posto anche se serve poco a nulla.
Codice (Java): [Seleziona]
@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Cursor c = mNotesCursor;
        c.moveToPosition(position);
        Intent i = new Intent(this, Progetto.class);
        i.putExtra(ProgettoTable.KEY_ID, id);
        i.putExtra(ProgettoTable.CODICE, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CODICE)));
        i.putExtra(ProgettoTable.RAGSOC, c.getString(c.getColumnIndexOrThrow(ProgettoTable.RAGSOC)));
        i.putExtra(ProgettoTable.DATE, c.getString(c.getColumnIndexOrThrow(ProgettoTable.DATE)));
        i.putExtra(ProgettoTable.INDIRI, c.getString(c.getColumnIndexOrThrow(ProgettoTable.INDIRI)));
        i.putExtra(ProgettoTable.CITTA, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CITTA)));
        i.putExtra(ProgettoTable.PROV, c.getString(c.getColumnIndexOrThrow(ProgettoTable.PROV)));
        i.putExtra(ProgettoTable.ANNOTA, c.getString(c.getColumnIndexOrThrow(ProgettoTable.ANNOTA)));
        i.putExtra(ProgettoTable.CONTAMM, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CONTAMM)));
        i.putExtra(ProgettoTable.CONTTEC, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CONTTEC)));
        startActivityForResult(i, ACTIVITY_EDIT);
    }

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #1 il: 17 Ottobre 2012, 13:08:22 CEST »
0
non che fosse complicatissimo,
alla fine ho in parte fatto

Codice (Java): [Seleziona]
@Override
private static final int ACTIVITY_EDIT=1;

protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Cursor c = mNotesCursor;
        c.moveToPosition(position);
        Intent i = new Intent(this, ItemListActivity.class);
        i.putExtra(ProgettoTable.KEY_ID, id);
        i.putExtra(ProgettoTable.CODICE, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CODICE)));
        i.putExtra(ProgettoTable.RAGSOC, c.getString(c.getColumnIndexOrThrow(ProgettoTable.RAGSOC)));  
        startActivityForResult(i, ACTIVITY_EDIT);

    }

e nella classe ItemListActivity

Codice (Java): [Seleziona]
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        Bundle extras = getIntent().getExtras();
            if (extras != null)
            {
                String progettoCodice = extras.getString(ProgettoTable.CODICE);
                String progettoNome = extras.getString(ProgettoTable.RAGSOC);
                long progettoId = extras.getLong(ProgettoTable.KEY_ID);
                setTitle(progettoCodice+":  "+ progettoNome);
            }          
        setContentView(R.layout.activity_item_list);

        if (findViewById(R.id.item_detail_container) != null) {
            mTwoPane = true;
            ((ItemListFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.item_list))
                    .setActivateOnItemClick(true);
        }
    }

in questo modo ho recuperato i dati che volevo ma non sono ancora certo di aver risolto tutto.
la variabile progettoId dovrebbe essere sempre accessibile fin tanto che mi muovo nelle "anagrafiche secondarie".
dovrei dichiararla come Private Final Static ? cosa conviene fare?

grazie.

jfrankie

  • Visitatore
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #2 il: 23 Ottobre 2012, 21:41:44 CEST »
0
la modalità che hai seguito è corretta per avere maggiori dettagli ti invio questo http://www.survivingwithandroid.com/2012/09/passing-data-between-activities.html

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #3 il: 02 Novembre 2012, 20:10:35 CET »
0
non ho capito una cosa però o almeno non mi è chiara del tutto.

ho un activity principale dove ho una lista di dati presi dal db.

al click accedo alla seconda activity
Codice (Java): [Seleziona]
protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Cursor c = mNotesCursor;
        c.moveToPosition(position);
        Intent i = new Intent(this, SubMain.class);
        i.putExtra(ProgettoTable.KEY_ID, id);
        i.putExtra(ProgettoTable.CODICE, c.getString(c.getColumnIndexOrThrow(ProgettoTable.CODICE)));
        i.putExtra(ProgettoTable.RAGSOC, c.getString(c.getColumnIndexOrThrow(ProgettoTable.RAGSOC)));  
        startActivity(i);
    }

la nuova activity ha un title che riporta i dati passati
Codice (Java): [Seleziona]
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        Bundle extras = getIntent().getExtras();
            if (extras != null)
            {
                String progettoCodice = extras.getString(ProgettoTable.CODICE);
                String progettoNome = extras.getString(ProgettoTable.RAGSOC);
                long progettoId = extras.getLong(ProgettoTable.KEY_ID);
                setTitle(progettoCodice+":  "+ progettoNome);
            }          
        setContentView(R.layout.activity_button_list);

    }

inoltre ha una serie di pulsanti.
se premo il primo pulsante accedo ad un'activity con una lista chiamata lista1.
per passarmi i dati a questa terza activty eseguo un'altra
Codice (Java): [Seleziona]
public void onClick(View v) {
        Intent i1 = new Intent(this, lista1.class);
        i1.putExtra("ID", ProgettoId);
        i1.putExtra("CODICE", progettoCodice );
        i1.putExtra("NOME", progettoNome );
    startActivity(i1);
  startActivityForResult(i, ACTIVITY_EDIT);
    }

all'arrivo di questa terza activity i dati ci sono.
ma se premo il tasto indietro
ritorno alla seconda activity ma senza il title compilato.
per poterlo tenere compilato ho dovuto sovrascrivere il metodo onBackPressed più o meno in questo modo.
Codice (Java): [Seleziona]
public void onBackPressed()
{
      Intent mIntent2 = new Intent(this,SubMain.class);
      mIntent2.putExtra("ProgettoID", ProgettoID);
      mIntent2.putExtra("ProgettoCODICE", ProgettoCODICE);
      mIntent2.putExtra("ProgettoNOME", ProgettoNOME);
      startActivity(mIntent2);
      finish();
}

in pratica il programmino che stoò cercando di fare è composto da
activity prima => composta da una listview
activity seconda => title=elemento selezionato in activity1 + dei pulsanti.
activity terza =>      title=elemento selezionato in activity1 + listview caricata da db
activity quarta =>    title=elemento selezionato in activity1 + modifica elemento  selezionato in activity3

per ogni passaggio, per mantenere i dati sul title, ho dovuto usare sia nell'onclick che nel onBackPressed , Intent.putExtra per passare i dati da un activity all'altra.
Sinceramente tutti questi passaggi di variabili mi sembrano strani.
e' questo il metodo corretto?

jfrankie

  • Visitatore
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #4 il: 05 Novembre 2012, 11:02:09 CET »
0
Ogni volta che ti muovi da una Activity ad un altra devi comunque passare i dati, se sei pratico di Servlet è come se mettessi i dati in una request che dura solo per la visualizzazione della pagina.
Se quando torni indietro prendi il titolo dall'Intent in questo caso l'Intent non c'è perchè veniva creato dalla prima Activity e quindi il title è null.
Spero di essere stato "abbastanza" chiaro! :)

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #5 il: 05 Novembre 2012, 15:35:07 CET »
0
chiarissimo :)

speravo solo ci fosse qualcosa del tipo:
crea variabile globale e mantienila per tutto il tempo che l'app è attiva o viene modificata.

detto questo, continuo con la procedura usata fino ad ora. usando uvvore il boundle e putExtra ogni volta che cambio activity.

jfrankie

  • Visitatore
Re:Accedere ad una nuova activity portandosi dietro un ID
« Risposta #6 il: 05 Novembre 2012, 17:21:04 CET »
0
Puoi sempre creare delle var statiche che ti durano per tutta l'app. Oppure estendere la classe Application.