Visualizzazione stampabile
-
Feeeeermi tutti.
La onCreateDialog() non è che puoi metterla a piacere in una classe e pensare che funzioni.
La onCreateDialog(int i) è un metodo proprio di una Activity e fa parte del ciclo di vita delle attività. Quindi deve essere necessariamente implementata su una classe che estenda Activity.
Quando all'inizio ti ho detto che AlertDialogsystem non doveva essere necessariamente una Activity intendevo che il wrapper che deve contenere la logica di fabbricazione i dialog non deve essere necessariamente una activity, ma la onCreateDialog(int i) DEVE necessariamente essere inserito in un'activity.
Quindi inserisci la onCreateDialog nella activity e lì dentro invochi la AlertDialogsystem dove fabbrichi il dialog.
la showdialog la metti nell'activity dove... bhe... dove deve apparire il dialog.
-
Io modificherei la classe AlertDialogSystem per farla funzionare a mo' di factory, ovvero costruire solo la dialog e la restituisce fuori, il codice che la invoca e la mostra resta nell'activity, la classe ti servirà solo a costruire il dialog dove serve.
-
Quote:
Originariamente inviato da
Orochi
Io modificherei la classe AlertDialogSystem per farla funzionare a mo' di factory, ovvero costruire solo la dialog e la restituisce fuori, il codice che la invoca e la mostra resta nell'activity, la classe ti servirà solo a costruire il dialog dove serve.
Esattamente il mio pensiero! :)
-
ok Grazie ragazzi! mi avete non solo chiarito le idee, ma ridato un pò di speranza !!!!! :D
Per completezza , posto i codici funzionanti! Volevo seguire il consiglio di Orochi sul context, ma non sò ancora se quella che stò sviluppando dovrà essere un'applicazione "pesante"
codice:
public class audio extends Activity {
/** Called when the activity is first created. */
AlertDialog.Builder builder ;
@Override
public void onCreate(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;
onCreateDialog(i);
showDialog(i);
}
});
no.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
});
}
}
public Dialog onCreateDialog( int i){
AlertDialogsystem alert=new AlertDialogsystem();
Context cnt=this;
return alert.CreateDialog(cnt,i);
}
}
alertdialog
codice:
public class AlertDialogsystem {
static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;
AlertDialog.Builder builder ;
Dialog dialog;
public Dialog CreateDialog(Context cnt,int id) {
switch(id) {
case DIALOG_PAUSED_ID:
builder=new AlertDialog.Builder( cnt);
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
}
});
dialog= builder.create();
break;
case DIALOG_GAMEOVER_ID:
// do the work to define the game over Dialog
break;
default:
builder= null;
}
return dialog;
}
}
-
Quote:
Originariamente inviato da
allmystery
ok Grazie ragazzi! mi avete non solo chiarito le idee, ma ridato un pò di speranza !!!!! :D
Così ci fai sentire Emergency roftl
P.S. Con tag JAVA invece del tag CODE puoi postare codice "colorato"*, più leggibile.
*: Che ci crediate o no, nonostante tutto il mio purismo, contro il codice colorato non ho niente. Anche se un giorno vi capiterà di lavorare via terminale monocromatico in vi puro, quindi tenete sempre a mente che potreste non averlo a disposizone. :p
-
-
Rieccomi.... non sò se aprire un nuovo post, oppure continuare questo, perchè non ho capito se la questione adesso si è spostata sul context, oppure è rimasta la modularizzazione del codice. Magari poi segnalatemi voi...
La questione è questa: (piccolo riassunto) Nel file AlertDialogsystem io genero i dialog da restituire al chiamante, ovvero audio.java. Nell'alterdialog si implementa anche ciò che deve accadere quando si clicca sul pulsante si, e sul no.Io devo cambiare schermata, ovvero devo passare da un activity ad un'altra.
Ora sorge il problema. Alertdialogsystem non estende Activity. e io da subito ho pensato che dopo l'onclick chiamo un metodo implementato in audio.
senza nessun risultato.
Ovviamente nel metodo passa_descrizione_applicazione() c'è la creazione dell'intent e la chiamata di startActivity.
Ho fatto altre mille prove da stamattina. Come ad esempio, cercare di implementare l'intero Onclick in audio. ovvero:
Ma ovviamente poi AlertDialogsystem dà errore in
vuole per forza qui l'onclick.
dai dai datemi suggerimenti, che finalmente stò imparando! comunque secondo me è il context che forse dà problemi.
-
Potresti provare a passare il listener da fuori al metodo che costruisce il dialog, in modo da crearlo fuori e assegnarlo dentro col builder...
-
misà che non ho capito molto bene.
e in audio che esteende activity
ps:io clicco su java al posto di CODE ma nn fà il testo rosso.... cmq ....
-
Quote:
Originariamente inviato da
allmystery
ps:io clicco su java al posto di CODE ma nn fà il testo rosso.... cmq ....
Vuoi troppo... a me interessava la colorazione della sintassi ;)
Comunque credo che tu continui a fare con il framework cose un po' perverse :p
Se audio è una activity non credo sia molto bello che tu cerchi di istanziarla con una new e sperare di poter usare un suo metodo per lanciare un intent. E' tutto fuori framework.
Devi capire che la modularizzazione è una cosa buona e giusta, ma devi far fare agli elementi android le parti più strettamente legate al ciclo di vita android.
E qui interviene il fatto che hai dovuto passare il context alla tua classe. Secondo me dovresti:
- rendere il tuo alertdialogsystem affinchè implementi DialogInterface.OnClickListener
- Passare la classe medesima al listener
builder.setPositiveButton("ok", this);
poi implementare in alertdialogsystem il metodo onClick. E quando devi lanciare l'intent invocare un metodo del cnt che a questo punto devi salvarti da qualche parte mentre lo passi al metodo.
Sai una cosa? Quando la modularizzazione porta a soluzioni così contorte di solito io comincio a sospettare che sia un modo errato di modularizzare... o_O