2012-02-23 31 views
5

tôi đang cố gắng chuyển danh sách mảng trở lại hoạt động gốc của tôigửi danh sách mảng trở lại hoạt động gốc

Đây là mã đơn giản.

private ArrayList<Receipt> receipts = new ArrayList<Receipt>(); 


Intent data = new Intent(); 
data. // what to do here? 
setResult(RESULT_OK, data); 

//************************************ 

Đây là cơ bản nhận lớp

public class Receipt { 


    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public Date createdOn; 
    public Date updatedOn; 

Nói cho tôi biết làm thế nào tôi có thể thêm nó vào ý định của tôi và làm thế nào tôi có thể lấy nó trở lại trong hoạt động cha mẹ từ

onActivityResult(final int requestCode, int resultCode, final Intent data) 
+1

Bạn đã kiểm tra câu hỏi này chưa? -> http://stackoverflow.com/questions/5207510/android-passing-an-arraylist-back-to-parent-activity –

+0

http: // stackoverflow.com/questions/4626861/put-object-as-intent-for-next-activity ..... tương tự như cái này ??? –

Trả lời

3

Bạn có thể sử dụng data.putExtra()/bundle.putSerializable() để đưa đối tượng tùy chỉnh trong một Bundle/Ý định, tuy nhiên, bạn cần phải thực hiện nhận lớp học của bạn thực hiện Serializable (chỉ cần đặt implements Serializable sau tên lớp, đó là tất cả để có nó với một lớp đơn giản như vậy sau đó, để đọc nó trở lại bạn sử dụng getSerializable()

Lưu ý:.. tôi không nghĩ rằng Date -clas s là serializable, bạn có thể muốn thay thế những người có một thời gian đại diện dài trong mili giây thay vào đó (bạn có thể sử dụng Date.getTime() cho điều đó).

Ví dụ:

public class Receipt implements Serializable{ 
    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public long createdOn; 
    public long updatedOn; 
    //... 
} 

//Put the list in the intent 
List<Receipt> list = ... 
Intent data = new Intent(); 
data.putExtra("tag", list); 

//Read the list from the intent: 
list = (List<Receipt>) data.getSerializableExtra("tag"); 
0

giải pháp của bạn là để sử dụng có thể chuyển nhượng. Đi qua các liên kết sau đây:

link1, link2, link3

0

Bạn chỉ có thể vượt qua ArrayList của bạn và lấy lại.

Ví dụ:

ArrayList<Receipt> list = new ArrayList<Receipt>(); 
intent intent = new Intent(); 
intent.putExtra("Hello", list); 

Nhưng chắc chắn rằng bạn phải implements Serializable giao diện trong lớp nhận của bạn.

tức

public class Receipt implements Serializable 
0

Trong trường hợp ArrayList của bạn sẽ là lớn đi qua nó như dữ liệu Ý định có thể gây ra các vấn đề như ứng dụng không đáp ứng. Điều này là bởi vì nó sẽ mất thời gian cho hệ điều hành để vượt qua tất cả các dữ liệu.

Thay vào đó, bạn có thể tạo lớp Ứng dụng của riêng mình (bạn cũng phải đăng ký lớp này trong Tệp kê khai của mình). Sau đó, trong lớp này bạn có thể có

class MyApplication extends Application { 
... 
public static Object mData; 
} 

Và sau đó bạn có thể làm MyApplication.mData = receiptsArrayList<Receipt> receipts = (ArrayList<Receipt>)(MyApplication.mData) cho phù hợp.

Vì đối tượng MyApplication của bạn sẽ tồn tại trong toàn bộ vòng đời của ứng dụng, phương pháp này đủ an toàn và được đề xuất trong sách trên Android (trong số các ứng dụng khác).

+1

phương pháp này không được khuyến nghị – Selvin

+0

là một trong những phương pháp được đề xuất trao đổi dữ liệu trong sách Pro Android 3 và các nơi khác. Dù sao, những gì là xấu về phương pháp này mà bạn đang nói nó không được khuyến khích. Cố gắng vượt qua một mảng rất lớn thông qua dữ liệu ý định và bạn sẽ thấy lỗi ANR. –

+0

đầu tiên: tôi đã nhìn vào cuốn sách này và tôi cũng không thể nói những điều tốt đẹp về nó. thứ hai: đối tượng toàn cầu sẽ không được giải phóng cho đến khi ứng dụng kết thúc. thats lý do tại sao thrid: vấn đề này là phức tạp hơn ... tại sao vì lợi ích của FSM sử dụng ý định vượt qua mảng lớn ở tất cả. nếu có nhu cầu về điều này, điều đó có nghĩa là ứng dụng được thiết kế kém. theo ý kiến ​​của tôi trong trường hợp này chúng ta nên sử dụng ContentProvider và chỉ truyền Uri (Intent.getData()), sau đó ContentProvider "hỏi" với Uri này sẽ trả về con trỏ với tất cả dữ liệu mà chúng ta cần – Selvin

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