Autore Topic: Ritornare all'activity principale dopo la chiamata di un intent  (Letto 1527 volte)

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Ritornare all'activity principale dopo la chiamata di un intent
« il: 20 Novembre 2010, 14:14:44 CET »
0
Buongiorno.
Ho un quesito. Io ho un'activity principale in cui chiamo tramite un intent all'evento onclick() di un bottone del menu l'applicazione barcode scanner nel seguente modo:

Codice (Java): [Seleziona]
//MENU BARCODE SCANNER         
               
                menu.add(GROUPA, 0, order++, "| Barcode Scanner |").setIcon(R.drawable.barcode).setOnMenuItemClickListener(
                                new OnMenuItemClickListener() {

                                        @Override
                                        public boolean onMenuItemClick(MenuItem menuItem) {
                                                Log.i("MENUUU", "onMenuItemClick "+ menuItem.getTitle());
               
                                                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                                                startActivityForResult(intent, 0);  
                                               
                                                   db2.open();
                                                   Cursor f = db2.fetchProductsInLista();
                                           startManagingCursor(f);
                                           db2.close();
                                                                                                                                       
                                                //ritorniamo false
                                                return false;
               
                                        }});

Il risultato della lettura del codice a barre lo salvo in una stringa e poi lo vado per ora solo a visualizzare nel logcat. Tale operazione la faccio nel seguente modo:
Codice (Java): [Seleziona]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (resultCode == Activity.RESULT_OK && requestCode == 0) {
                        String scanResult = data.getStringExtra("SCAN_RESULT");
                        Log.i("RISULTATO DELLO SCAN: ",scanResult);                    
 
                }
                else {
                        Log.i("RISULTATO DELLO SCAN: ","ERRORE - OPERAZIONE ANNULLATA");       
                }
        }



Volevo chiedere come potevo fare per tornare all'activity principale nel punto in cui è stato chiamato l'intent...io per ora mi limito a riaprire il database e a ricaricare nella listview tramite una query collegata a un cursore gli elementi che mi interessano....

Codice (Java): [Seleziona]
   db2.open();
                                                   Cursor f = db2.fetchProductsInLista();
                                           startManagingCursor(f);
                                           db2.close();

....solo che l'activity principale viene inizializzata e lanciata di nuovo tutta completamente...io vorrei far ripartire l'activity principale nel punto in cui l'intent è stato chiamato....
vi ringrazio ciao.


Offline dgtale

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +2
    • Mostra profilo
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #1 il: 22 Novembre 2010, 07:47:22 CET »
0
Ciao Albe85,
da quello che ho visto e che hai spiegato, tutto funziona correttamente.
Potresti essere più preciso nell'esposizione del tuo problema?
Credo che tu conosca già i cicli di vita delle activity, in caso contrario dai un'occhiata qui: Application Fundamentals | Android Developers

Per quanto riguarda l'update della lista al ritorno dall'activity chiamata, ti consiglio di inserire un cursor.requery() nel metodo onActivityResult.

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #2 il: 22 Novembre 2010, 09:53:19 CET »
0
Ciao dgtale...innanzitutto grazie per l'interessamento al mio problema...cerco di spiegare meglio qual è il mio problema...
dalla mia activity principale lancio via intent l'applicazione per la lettura dei codici a barre (barcode scanner)....
una volta che ho letto il codice a barre sono riuscito a far comparire in un toast nell'activity principale con il nome dell'articolo per cui è stato letto il codice a barre, andando ad interrogare il mio database sqlite lato android....fino a qua nessun problema...a parte che quando dall'intent lanciato torno all'activity principale, quest'ultima sembrerebbe essere re-inizializzata dall'inizio...(inizialmente all'avvio dell'activity principale mi faccio inviare dal server al dispositivo due file xml serializzati contenente dei dati)...cioè avviene di nuovo l'invio dei due file dal server...
quello che vorrei sapere è se è possibile mettere dei flag in cui far ripartire l'activity principale una volta che è terminato l'intent associato al barcode scanner...

per quanto riguarda l'aggiornamento della lista al ritorno dell'activity chiamata ho fatto nel seguente modo:
Codice (Java): [Seleziona]
public void onActivityResult(int requestCode, int resultCode, Intent data ) {
               
               
                super.onActivityResult(requestCode, resultCode, data);
                if (resultCode == Activity.RESULT_OK && requestCode == 0) {
                        BarCodeString = data.getStringExtra("SCAN_RESULT");
                        Log.i("RISULTATO DELLO SCAN: ",BarCodeString);                 
                       
                        db2.open();
                          Cursor f = db2.fetchProducts();
                  startManagingCursor(f);
                  f.moveToFirst();
                   
                   for(int q=1;q<=f.getCount();q++)
                        {
                   
                   int mNameIndex = f.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_NOME_KEY);
                   int mBarIndex = f.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_BARCODE_KEY);
                   int mUriIndex = f.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_URIIMG_KEY);

                   if(BarCodeString.equals(f.getString(mBarIndex)))
                   {
                        Context context = getApplicationContext();
                        CharSequence text = "BARCODE:"+f.getString(mBarIndex)+"NOME: "+f.getString(mNameIndex);
                        int duration = Toast.LENGTH_LONG;
                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
       
                        ImageView image = new ImageView(activity);  
                        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
             
                        String s = f.getString(mUriIndex).substring(8);
                        s=s.replaceAll("%20", " ");
                        String myJpgPath = s;
                        BitmapFactory.Options options = new BitmapFactory.Options();
                        options.inSampleSize = 2;          
                        Bitmap bm = BitmapFactory.decodeFile(myJpgPath, options);
                        image.setImageBitmap(bm); //Sostituisci la tua bitmap
                        builder.setTitle("Conferma Acquisto");
                        builder.setIcon(R.drawable.carrello);
                        builder.setView(image);
                        builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                      dialog.cancel();  
                  }
                           });
                       
               builder.setMessage("Vuoi acquistare una confezione di "+f.getString(mNameIndex)+" ?").setCancelable(false);    
           
               
                 builder.setPositiveButton("Conferma", new DialogInterface.OnClickListener() {                      
                  public void onClick(DialogInterface dialog, int id) {
                       
                           //DA GESTIRE
                       
                       
                       
                       
                   }else{
                          //  Context context = getApplicationContext();
                        //CharSequence text = "ARTICOLO NON PRESENTE!";
                        //int duration = Toast.LENGTH_LONG;
                        //Toast toast = Toast.makeText(context, text, duration);
                        //toast.show();
                   }
                   f.moveToNext();
                        }
                   db2.close();
                       
                }
                else {
                        Log.i("RISULTATO DELLO SCAN: ","ERRORE - OPERAZIONE ANNULLATA");       
                }

        }

Quello che vorrei fare è praticamente, già come faccio gestendo manualmente gli onclick sugli elementi della mia listview, andare ad aggiornare e ad inserire degli elementi nel mio db. Il tutto non prima di far comparire un menu di interazione in cui compare l'immagine e il nome dell'articolo dell'elemento di cui è stata fatta la lettura del codice a barre...solo che come faccio ora nel codice sopra riportato mi compare solo il toast una volta che ritorno all'activity principale ma del dialog menu non si vede nemmeno l'ombra =)....non so se va gestito nell'onResut o posso fare in modo di farlo gestire nell'activity principale...
ti ringrazio ciao
« Ultima modifica: 22 Novembre 2010, 09:55:34 CET da Albe85 »

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #3 il: 22 Novembre 2010, 11:01:11 CET »
0
Molto probabilmente l'alert dialog non compare quando torno all'activity principale perchè sbaglio in questo punto:

Codice (Java): [Seleziona]
AlertDialog.Builder builder2 = new AlertDialog.Builder(activity);
in particolare secondo me è sbagliato activity dove activity la dichiaro private e poi la modifico nel seguente modo:

Codice (Java): [Seleziona]
public class Demo extends Activity {
       
        private Activity activity;

  @Override
    public void onCreate(Bundle savedInstanceState) {
           this.activity=this;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
                         

Come posso fare per passare la stringa letta da barcode all'activity principale?

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #4 il: 23 Novembre 2010, 09:57:11 CET »
0
Per quanto riguarda il problema che non compariva l'alert dialog era semplicemente perchè mi ero dimenticato un
builder.show() :)

Per quanto riguarda il resto non c'è nulla da passare all'activity principale con qualche return o con qualche getter/setter....basta scrivere tutto quello che ci serve all'interno del metodo

public void onActivityResult(int requestCode, int resultCode, Intent data )


Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #5 il: 23 Novembre 2010, 10:13:02 CET »
0
Prova a vedere questo.
Nello specifico, il paragrafo Returning a Result from a Screen che mostra l'utilizzo del metodo startActivityForResult.
Spero che sia quello che ti serve.

ciao.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Ritornare all'activity principale dopo la chiamata di un intent
« Risposta #6 il: 23 Novembre 2010, 14:40:39 CET »
0
ti ringrazio...ci darò sicuramente una lettura...grazie ancora ciao