2013-03-10 9 views
6

Ich versuche Klassenname mit extra zu übergeben, wie geht das?Kann ich eine Klasse extra mit Absicht senden?

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

Ich mag Einstellung Klasse die Klassennamen bekommen, aber ich will nicht, es String Ursache sein ich diese Klassennamen so verwenden werde:

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

Was möchten Sie erreichen? – Stefan

+0

Ich habe Aktivitäten eingestellt, die das Thema für die Anwendung ändern, also brauche ich die Einstellungsaktivität, um die Aktivität zu starten, die sie aufgerufen hat, wenn sie fertig ist. das reson kann ich nicht nur verwenden ende() ist, dass ich die letzte aktivität brauche, um wieder von vorne zu beginnen und nicht jst resume. –

Antwort

15

Sie verwenden können, dieser Code

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

und in Einstellung Klasse

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

funktioniert super! Danke . –

7

Ein aufgeräumter Weg als die angenommene Antwort wäre Serializable oder Parcelable. Hier

ist ein Beispiel dafür, wie es zu tun mit Serializable:

In Ihrer ersten Aktivität ...

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

Dann in Ihrer zweiten Aktivität ...

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

Doing es mit Parcelable ist ziemlich genau das gleiche, außer Sie würden extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS") im obigen Code mit extras.getParcelable("EXTRA_NEXT_ACTIVITY_CLASS") ersetzen.

Die Parcelable-Methode wird schneller, aber schwieriger einzurichten (wie Sie Ihre dritte Aktivität implementieren müssen Parcelable - siehe http://developer.android.com/reference/android/os/Parcelable.html).

+1

Danke für diese Antwort! Es ist erwähnenswert, dass dies im Fall der Entwicklung von Plugins im Gegensatz zur genehmigten Antwort funktioniert. Ich arbeite gerade an einem Plugin, das einen Bildschirm öffnet, der wissen muss, welche Klasse nach Abschluss dieses Bildschirms geöffnet werden soll. Class.forName funktioniert in diesem Fall nicht, da das Plugin den Klassennamen nicht kennt. Parsen des Klassennamens als serialisierbar wird. –

+0

Dies sollte die akzeptierte Antwort sein! Vielen Dank ;) – noelicus

Verwandte Themen