2012-06-11 27 views
6

Tôi muốn làm điều này Sử dụng Parcelable để vượt qua một đối tượng từ một hoạt động android khác

class A extends Activity{ 
    private class myClass{ 
    } 
    myClass obj = new myClass(); 

    intent i = new Intent(); 
    Bundle b = new Bundle(); 
    b.putParcelable(Constants.Settings, obj); //I get the error The method putParcelable(String, Parcelable) in the type Bundle is not applicable for the arguments (int, A.myClass) 
    i.setClass(getApplicationContext(),B.class); 
    startActivity(i); 
} 

Làm thế nào để sử dụng Parcelable để vượt qua obj để hoạt động B?

Trả lời

5

Khi lỗi gợi ý, bạn cần phải làm cho lớp học của bạn (myClass trong trường hợp này) triển khai Parcelable. Nếu bạn nhìn vào số documentation for Bundle, tất cả các phương thức putParcelable có thể là Parcelable hoặc một bộ sưu tập trong số đó. (Điều này có ý nghĩa, được đặt tên.) Vì vậy, nếu bạn muốn sử dụng phương pháp này, bạn cần phải có một trường hợp Parcelable để đưa vào bó ...

Tất nhiên bạn không sử dụng putParcelable - bạn có thể triển khai Serializable thay thế và gọi putSerializable.

+0

Cách tôi đã hiểu giao diện Serializable là nó được sử dụng để hỗ trợ serialization và deserialization. Làm thế nào là áp dụng ở đây? Ngoài ra, ngay cả khi tôi thực hiện Parcelable, làm thế nào để chuyển đổi đối tượng của tôi thành một bưu kiện? Bạn có thể chỉ cho tôi một ví dụ? – Namratha

+0

@Namratha: Bạn đang cố gắng truyền thông tin xung quanh, đó chính xác là những gì tuần tự hóa ở đó. Nếu bạn đang làm việc trong cùng một quy trình, bạn không cần một gói nào cả, theo như tôi có thể nói - nhưng nếu bạn cần truyền thông tin giữa các tiến trình, việc tuần tự hóa theo một dạng hoặc khác là những gì bạn đang nói về . –

+0

Tôi hiểu. Nhưng tôi đọc ở đây http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/ rằng Serializable được liên kết với một hiệu suất hit trong khi Parcelable thì không. Ngoài ra tôi vẫn gặp khó khăn khi cố gắng chuyển đổi đối tượng của tôi thành một thể hiện Parcelable. – Namratha

7

Tạo lớp học của bạn và thực hiện Serializable:

private class myClass implements Serializable { 
    } 

Và làm như:

myClass obj = new myClass(); 
Intent aActivity = (A.this, B.class); 
intent.putExtra("object", obj); 

On Nhận phụ:

myClass myClassObject = getIntent().getSerializableExtra("object"); 
+0

Tôi nghĩ bạn có nghĩa là Ý định aActivity = new Intent (A.this, B.class); ? Cảm ơn! – Namratha

2

Khéo tiếng là nỗi đau bằng cách viết mã nhưng hiệu quả về chi phí cao hơn Serializable. Có một cái nhìn tại đưa ra dưới đây liên kết -

Parcelable Vs Serializable

Các vấn đề liên quan