CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: megthebest con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: gianpassa con ben 9 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Pagina 1 di 3 123 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 22
Discussione:

modularizzare codice android

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    modularizzare codice android

    Salve ragaazzi! è brutto essere alle prime armi! mi viene spontaneo programmare con le regole del java.... dimentico che in android occorre rispettare la "discendenza" activity, intent, service ecc...
    In pratica io ho programmato sempre in modo modulare. e vorrei fare così anche con android.
    In pratica, io ho vari alertdialog che come spiegato nel tutorial li costruisco in uno switch e li richiamo nell'oncreate() con showdialog(int).
    Ora io questo lo devo modularizzare, nel senso che devo poter accedere allo switch ogni qual volta che mi serve richiamare un alertdialog. Magari col codice mi spiego meglio:
    codice alertdialogsystem dove è implementato lo switch, uguale a quello del tutorial, e a cui ringrazio Orochi :

    codice:
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    
    public class AlertDialogsystem extends Activity{
    	static final int DIALOG_PAUSED_ID = 0;
    	static final int DIALOG_GAMEOVER_ID = 1;
    	
    	public  Dialog onCreateDialog(int id) {
    	    Dialog dialog = null;
    	    switch(id) {
    	    case DIALOG_PAUSED_ID:
    	        // do the work to define the pause Dialog
    	    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	    	builder.setMessage("Are you sure you want to exit?")
    	    	       .setCancelable(false)
    	    	       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    	    	           public void onClick(DialogInterface dialog, int id) {
    	    	               // MyActivity.this.finish();
    	    	           }
    	    	       })
    	    	       .setNegativeButton("No", new DialogInterface.OnClickListener() {
    	    	           public void onClick(DialogInterface dialog, int id) {
    	    	                dialog.cancel();
    	    	           }
    	    	       });
    	    	dialog = builder.create();
    	        break;
    	    case DIALOG_GAMEOVER_ID:
    	        // do the work to define the game over Dialog
    	        break;
    	    default:
    	        dialog = null;
    	    }
    	    return dialog;
    	}
        @Override
        public  void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            showDialog(DIALOG_PAUSED_ID);
        }
    }
    questo invece è il codice esterno a AlertDialogsytem, in cui voglio chiamare l'alertdialog con int=DIALOG_PAUSED_ID. In pratica quando viene premuto il pulsante "si", dovrebbe apparire l'alertdialog. Ho fatto verie prove. Non badate all'uso del StartActivityOfNeeded() è una delle tante prove.
    codice:
     si.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				int i=AlertDialogsystem.DIALOG_PAUSED_ID;
    				//showDialog(i, savedInstanceState);
    				//AlertDialogsystem.showDialog(i);
    				Intent audio_si=new Intent();
    				startActivityIfNeeded(audio_si, i);
    			
    			}
            });
    mi scuso se mi son dilungato un pò troppo nello spiegare.
    Grazie in anticipo a chi saprà aiutarmi.

  2.  
  3. #2
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Perdona, non mi è tutto chiaro, ma ci provo...

    Tu vorresti un oggetto che fabbrichi dialog in base a un ID che gli passi tu così da centralizzare tutti gli alert che usi nella tua applicazione.

    A questo punto devi proprio pensare in JAVA e non in termini di android
    Non è che perchè ti trovi nel framework android TUTTO deve essere una activity. Deve essere una activity tutto quello che deve essere gestito tramite un'intent(e quindi deve essere registrato sul manifest).

    Quindi crea pure la tua AlertDialogsystem come una classe JAVA qualsiasi e poi usala all'interno delle activity come meglio credi (o perché i suoi metodi sono static o perché ne instanzi un oggetto...)
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  4. #3
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    si si hai capito bene!
    la prima cosa che ho fatto è pensarla in termini di java. allego i due file che contengono AlertDialogsystem che contiene lo switch e audio da cui richiamo un alert nello switch.
    http://www.softmystery.altervista.org/audio.rar
    Dato che non funziona , allora ho pensato che forse dovevo trattarli come activity/intent....
    cmq nel file AlertDialogsystem se scrivo
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    eclipse dà errore not suggestion available

  5. #4
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Quote Originariamente inviato da allmystery Visualizza il messaggio
    cmq nel file AlertDialogsystem se scrivo
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    eclipse dà errore not suggestion available
    Il costruttore AlertDialogi.Builder vuole come parametro un context. Quindi non puoi usare this a meno che tu non lo stia invocando da dentro un'activity (che è un context).
    Il modo migliore per svicolare da questa situazione è inserire nel costruttore del AlertDialogSystem il parametro context e salvarlo in un attributo della classe, tipo cntx.
    Quando andrai a instanziare la classe da dentro l'activity basterà crearla come


    A questo punto quando invochi l'AlertDialog.Builder puoi usare:


    E' molto consueto dover costruire tutto con un context, è il modo in cui si può portare il framework android "fuori" dalle classi proprie del suo ciclo di vita.
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  6. Il seguente Utente ha ringraziato Cymon per il post:

    allmystery (03-01-11)

  7. #5
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    ok, il context è sistemato ma comunque non visualizza gli alertDialog
    http://www.softmystery.altervista.org/audio1.rar

  8. #6
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Non so se c'entra con il problema che continua a non funzionare, ma se posso intervenire suggerirei di non conservare una variabile context dentro il tuo AlertDialogSystem ma piuttosto di passarlo da fuori quando ti serve, ovvero ogni volta che lo invochi. Questo perchè il context è un oggetto "pesante" che rischia di restare bloccato se per caso l'activity da cui l'hai ricavato viene distrutta (ad esempio perchè è ruotato il telefono) e quindi la vecchia istanza resterebbe appesa e non "pulita" dal garbage collector, a lungo andare questo provoca dei memory leak che possono consumarti e ridurre la memoria disponibile nell'applicazione!
    Magari se è una piccola applicazione non ci fai caso, ma è meglio sempre sapere queste cose

    Vi linko un articolo interessante sempre dalla nostra bibbia:
    Avoiding Memory Leaks | Android Developers

  9. #7
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    ok grazie del consiglio!
    ecco i codici, in cui c'è ancora qualcosa che impedisce la visualizzazione dell'alterdialog:
    codice:
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.view.View.OnClickListener;
    
    
    public class AlertDialogsystem {
    	static final int DIALOG_PAUSED_ID = 0;
    	static final int DIALOG_GAMEOVER_ID = 1;
    	
    	// static Dialog dialog = null;
    		 AlertDialog.Builder builder ;
    		
    	public AlertDialogsystem(OnClickListener onClickListener,int id) {
    	   
    	    switch(id) {
    	    case DIALOG_PAUSED_ID:
    	        // do the work to define the pause Dialog
    	    	//builder= new AlertDialog.Builder(null);
    	    	builder=new AlertDialog.Builder((Context) onClickListener);
    	    builder.setTitle("prova");
    	    builder.setMessage("prova messaggio");
    	    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    			}
    		});
    	    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    			}
    		});
    	   
    	    	 builder.create();
    	    	builder.show();
    	        break;
    	    case DIALOG_GAMEOVER_ID:
    	        // do the work to define the game over Dialog
    	        break;
    	    default:
    	        builder= null;
    	    }
    	
    	}
       
    }
    e il "main"
    codice:
    import android.app.Activity;
    import android.app.AlertDialog;
    
    import android.os.Bundle;
    
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class audio extends Activity {
        /** Called when the activity is first created. */
    	AlertDialog.Builder builder ;
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout.audio);
            //se clicca su si flag=si
           //se clicca su no  flag=no 
           //prima di cambiare il valore del flag attraverso il dialog label l'utente confermerà la propria azione
           //nelle prox schermate fare l'if flag==si allora emana audio se invece è no allora non gestire audio
          
           //richiamo bottoni da audio.xml
            final Button si=(Button)findViewById(R.id.buttonsi);
        	
            Button no=(Button)findViewById(R.id.buttonno);
            
            //associo un onclick ad ogni button devo gestire il dialog label
            si.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				int i=AlertDialogsystem.DIALOG_PAUSED_ID;
    				
    			new AlertDialogsystem(this,i);
                   
    
    			
    			}
            });
    
            no.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				
    				
    			}
            	
            });
    
    
    }
    }
    è da stamattina che stò impazzendo, ma non funziona!!!!!!!!

  10. #8
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Aspetta un attimo... ma nell'Activity è scomparso sia l'onCreateDialog che la showDialog... perché dovrebbe funzionare?
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  11. #9
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    Alertdialogsystem è un semplice codice java(seguendo il cosiglio all'inizio del post) showdialog() l'ho sostituito con .show() e createdialog l'ho eliminato....
    ok dai ora provo a cambiare. ma comunque non riesco a capire dove dovrei mettere showdialog(). Alertdialogsystem non è un activity e quindi non ha oncreate() con cui chiamare showdialog(). ovviamente correggetemi se scrivo fesserie!
    Ultima modifica di allmystery; 04-01-11 alle 11:36

  12. #10
    Androidiano


    Registrato dal
    Oct 2010
    Messaggi
    107

    Ringraziamenti
    22
    Ringraziato 1 volta in 1 Post
    Predefinito

    Fatto! ma senza risultato... lo showdialog davvero non sò dove metterlo!
    alertdialgsystem
    codice:
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.view.View.OnClickListener;
    
    
    public class AlertDialogsystem {
    	static final int DIALOG_PAUSED_ID = 0;
    	static final int DIALOG_GAMEOVER_ID = 1;
    	 AlertDialog.Builder builder ;
    	
    	 public void onCreateDialog(OnClickListener onClickListener,int id) {
    	//public AlertDialogsystem(OnClickListener onClickListener,int id) {
    	   
    	    switch(id) {
    	    case DIALOG_PAUSED_ID:
    	 
    	    	builder=new AlertDialog.Builder((Context) onClickListener);
    	    builder.setTitle("prova");
    	    builder.setMessage("prova messaggio");
    	    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    			}
    		});
    	    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    			}
    		});
    	   
    	    	 builder.create();
    	    	builder.show();
    	        break;
    	    case DIALOG_GAMEOVER_ID:
    	        // do the work to define the game over Dialog
    	        break;
    	    default:
    	        builder= null;
    	    }
    	
    	}
       
    }
    audio
    codice:
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class audio extends Activity {
        /** Called when the activity is first created. */
    	AlertDialog.Builder builder ;
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout.audio);
           
           //richiamo bottoni da audio.xml
            Button si=(Button)findViewById(R.id.buttonsi);
        	
            Button no=(Button)findViewById(R.id.buttonno);
            
            si.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				int i=AlertDialogsystem.DIALOG_PAUSED_ID;
    				
    				AlertDialogsystem dialog=new AlertDialogsystem();
    				dialog.onCreateDialog(this, i);
    				
    			//new AlertDialogsystem(this,i);
                 	}
            });
    
            no.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				}
            	});
    
    
    }
    }
    lo sò che sono io a sbagliare a programmare... ma non capisco dove!

Pagina 1 di 3 123 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy