2013-03-10 11 views
6

Sto provando a passare il nome della classe con extra, come farlo?Posso inviare la classe come extra con intenzione?

Intent p = new Intent(StartScreen.this, Setting.class); 
p.putExtra(" ",StartScreen.this); 

voglio ottenere il nome di classe in ambiente di classe, ma non voglio che sia String causa ho intenzione di utilizzare questo nome di classe come quella:

Bundle extras = getIntent().getExtras(); 
extras.getString("class"); 
Intent i = new Intent(Setting.this, class); 
startActivity(i); 
+0

Cosa vuoi raggiungere? – Stefan

+0

Ho impostato un'attività che modifica il tema per l'applicazione, quindi ho bisogno dell'attività di impostazione per avviare l'attività che l'ha richiamata al termine. il reson non posso usare solo finish() è che ho bisogno dell'ultima attività per ricominciare tutto da capo e non riprendere jst. –

risposta

15

si può usare questo codice

Intent p = new Intent(StartScreen.this, Setting.class); 
p.putExtra("class","packagename.classname"); 

e in classe ambiente

Bundle extras = getIntent().getExtras(); 
String classname=extras.getString("class"); 
Class<?> clazz = Class.forName(classname); 
Intent i = new Intent(Setting.this, clazz); 
startActivity(i); 
+0

funziona alla grande! grazie . –

7

Un modo più ordinato rispetto alla risposta accettata sarebbe utilizzare Serializable o Parcelable.

Ecco un esempio di come farlo utilizzando Serializable:

Nella tua prima attività ...

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
intent.putExtra("EXTRA_NEXT_ACTIVITY_CLASS", ThirdActivity.class); 
startActivity(intent); 

Poi, nel tuo seconda attività ...

Bundle extras = getIntent().getExtras(); 
Class nextActivityClass = (Class<Activity>)extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS"); 
Intent intent = new Intent(SecondActivity.this, nextActivityClass); 
startActivity(intent); 

Doing con Parcelable è praticamente la stessa, tranne che si sostituisce extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS") nel codice sopra con extras.getParcelable("EXTRA_NEXT_ACTIVITY_CLASS").

Il metodo Parcelable sarà più veloce, ma più difficile da configurare (poiché è necessario implementare il terzo strumento Attività Parcelable - vedere http://developer.android.com/reference/android/os/Parcelable.html).

+1

Grazie per questa risposta! Potrebbe valere la pena notare che ciò funzionerà nel caso di sviluppo di plugin come indicato nella risposta approvata. Attualmente sto lavorando su un plugin che fa apparire uno schermo, che dovrà sapere quale classe aprire al termine di quella schermata. Class.forName non funzionerà in questo caso perché il plugin non conosce il nome della classe. Analizzare il nome della classe come volontà serializzabile. –

+0

Questa dovrebbe essere la risposta accettata! Grazie ;) – noelicus

Problemi correlati