2013-03-10 11 views
6

Tôi đang cố gắng chuyển tên lớp với phụ, cách thực hiện?Tôi có thể gửi lớp học với mục đích bổ sung không?

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

Tôi muốn để có được tên lớp trong Setting lớp nhưng tôi không muốn nó được String nguyên nhân tôi sẽ sử dụng tên lớp này như thế:

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

Bạn muốn đạt được điều gì? – Stefan

+0

tôi có hoạt động cài đặt thay đổi chủ đề cho ứng dụng, vì vậy tôi cần hoạt động cài đặt để bắt đầu hoạt động gọi cho cô ấy khi hoàn thành. các reson i cant chỉ sử dụng kết thúc() là tôi cần hoạt động cuối cùng để bắt đầu lại và không tiếp tục jst. –

Trả lời

15

bạn có thể sử dụng mã này

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

và trong lớp học thiết lập

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

hoạt động tuyệt vời! cảm ơn bạn . –

7

Cách gọn gàng hơn câu trả lời được chấp nhận sẽ là sử dụng Serializable hoặc Parcelable.

Dưới đây là một ví dụ về cách để làm điều đó bằng Serializable:

Trong hoạt động đầu tiên của bạn ...

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

Sau đó, trong hoạt động thứ hai của bạn ...

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

Làm nó với Parcelable là khá nhiều giống nhau, ngoại trừ bạn sẽ thay thế extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS") trong mã trên với extras.getParcelable("EXTRA_NEXT_ACTIVITY_CLASS").

Phương pháp đáng giá sẽ nhanh hơn, nhưng khó thiết lập hơn (vì bạn cần thực hiện Hoạt động thứ ba của mình, triển khai Parcelable - xem http://developer.android.com/reference/android/os/Parcelable.html).

+1

Cảm ơn bạn đã trả lời câu trả lời này! Nó có thể đáng chú ý rằng điều này sẽ làm việc trong trường hợp phát triển các plugin như apposed cho câu trả lời được phê duyệt. Tôi hiện đang làm việc trên một plugin mà bật lên một màn hình, mà sẽ cần phải biết những gì lớp học để mở khi hoàn thành màn hình đó. Class.forName sẽ không hoạt động trong trường hợp này vì plugin không biết tên lớp. Phân tích tên lớp như là một tùy chọn tuần tự. –

+0

Đây phải là câu trả lời được chấp nhận! Cảm ơn ;) – noelicus