2013-03-10 13 views
6

Sınıf adını fazladan eklemeye çalışıyorum, nasıl yapmalı?Sınıfı niyetle fazladan gönderebilir miyim?

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

Dersim Ayar sınıf adını almak istiyorum ama String neden böyle bu sınıf adını kullanmak için gidiyorum olmak istemiyorum:

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

Neyi başarmak istersiniz? – Stefan

+0

Uygulama için temayı değiştiren bir etkinlik ayarlıyorum, bu yüzden tamamlandığında onu yapan etkinliği başlatmak için ayar etkinliğine ihtiyacım var. Ben sadece bitirmek kullanamazsınız rezonans() tekrar başlamak için en son faaliyete ihtiyacım var ve jst özgeçmiş. –

cevap

15

kullanabilirsiniz Bu kod

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

ve ayar sınıfında

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

harika çalışıyor! teşekkür ederim . –

7

Kabul edilen yanıtın daha pürüzsüz bir yolu, Serializable veya Parcelable kullanmaktır. İkinci etkinlikte Sonra

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

...

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

yapmak ... ilk etkinlikte

: Burada

Serializable kullanarak bunu nasıl örneğidir Parcelable ile hemen hemen aynı, extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS") yukarıdaki kodda extras.getParcelable("EXTRA_NEXT_ACTIVITY_CLASS") ile değiştirirseniz.

Parcelable yöntemi daha hızlı olacaktır, ancak kurulumu daha zor olacaktır (üçüncü Etkinlik aracınızı Parcelable yapmalısınız - bkz. http://developer.android.com/reference/android/os/Parcelable.html).

+1

Bu cevap için teşekkürler! Onaylanan cevaba göre eklenti geliştirme durumunda bunun işe yarayacağı belirtilmelidir. Şu anda o ekranın tamamlanmasında hangi sınıfın açılacağını bilmesi gereken bir ekranı açan bir eklenti üzerinde çalışıyorum. Bu durumda Class.forName çalışmaz, çünkü eklenti sınıf adını bilmez. Sınıf adını seri hale getirilebilir bir istek olarak ayrıştırma. –

+0

Bu kabul edilen cevap olmalı! Teşekkürler ;) – noelicus

İlgili konular