2011-06-30 31 views
6

Tôi có một Danh sách trong một trong các hoạt động của mình và cần chuyển nó vào hoạt động tiếp theo.Cách đặt Danh sách theo mục đích

private List<Item> selectedData; 

Tôi đã thử đặt này trong ý định bởi:

intent.putExtra("selectedData", selectedData); 

Nhưng nó không phải đang làm việc. Những gì có thể được thực hiện?

+0

Chính xác nó không hoạt động như thế nào? –

+0

Nó nói ** Ý định không áp dụng cho các đối số (Chuỗi, Danh sách ** –

Trả lời

8

Bạn phải khởi tạo List thành loại bê tông trước. List chính nó là một giao diện.

Nếu bạn implement the Parcelable interface trong đối tượng của mình thì bạn có thể sử dụng phương thức putParcelableArrayListExtra() để thêm nó vào Intent.

+0

Tôi có thể có một số ví dụ không? –

+1

Không, tôi đã thử nó.Không hoạt động.Tôi cũng đã thử ** view_order_intent.putParcelableArrayListExtra ("selectedData", (ArrayList ) selectedData); **. Đã xuất hiện không có lỗi nhưng tôi không thể Để có được nó –

+0

** selectedData = bundle.getParcelableArrayList ("selectedData"); ** .Tôi đã thử điều này để lấy mã.Tôi không làm việc –

4

tôi nghĩ rằng mặt hàng ur phải có thể chuyển đổi được. và bạn nên sử dụng arraylist thay vì danh sách. sau đó sử dụng intent.putParcelableArrayListExtra

+0

Ví dụ sẽ thực sự hữu ích. –

+1

Bạn cũng có thể làm cho mục đó thực hiện được 'Serializable' và nó trở nên tầm thường – howettl

10

Giống như howettl được đề cập trong nhận xét, nếu bạn tạo đối tượng bạn đang giữ trong danh sách có thể nối tiếp thì nó trở nên rất dễ dàng. Sau đó, bạn có thể đặt nó trong một Bundle mà sau đó bạn có thể đặt vào mục đích. Dưới đây là ví dụ:

class ExampleClass implements Serializable { 
    public String toString() { 
     return "I am a class"; 
    } 
} 

... */ Where you wanna create the activity /* 

ExampleClass e = new ExampleClass(); 
ArrayList<ExampleClass> l = new ArrayList<>(); 
l.add(e); 
Intent i = new Intent(); 
Bundle b = new Bundle(); 
b.putSerializeable(l); 
i.putExtra("LIST", b); 
startActivity(i); 
+5

Thực ra, nó phải là 'b.putSerialzeable (" key ", l)' và nó phải là lưu ý rằng để truy cập danh sách của bạn trong hoạt động khác, bạn phải thực hiện 'List listExtra = (ArrayList ) (intent.getBundleExtra (" LIST "). getSerializable (" key "))'. Tuy nhiên, nó dễ dàng hơn nhiều so với việc triển khai Parceable cho ExampleClass của bạn. – Ridcully

1

Đây là những gì hiệu quả đối với tôi.

//first create the list to put objects 
private ArrayList<ItemCreate> itemsList = new ArrayList<>(); 

//on the sender activity 
    //add items to list where necessary also make sure the Class model ItemCreate implements Serializable 
    itemsList.add(theInstanceOfItemCreates); 

     Intent goToActivity = new Intent(MainActivity.this, SecondActivity.class); 
         goToActivity.putExtra("ITEMS", itemsList); 
         startActivity(goToActivity); 

    //then on second activity 
    Intent i = getIntent(); 
      receivedItemsList = (ArrayList<ItemCreate>) i.getSerializableExtra("ITEMS"); 
      Log.d("Print Items Count", receivedItemsList.size()+""); 
      for (Received item: 
       receivedItemList) { 
       Log.d("Print Item name: ", item.getName() + ""); 
     } 

Tôi hy vọng nó cũng phù hợp với bạn.

0

Mọi người đều nói rằng bạn có thể sử dụng Serializable, nhưng không ai đề cập rằng bạn chỉ có thể truyền giá trị vào Serializable thay vì danh sách.

intent.putExtra("selectedData", (Serializable) selectedData); 

Triển khai danh sách của Core đã triển khai Serializable, vì vậy bạn không bị ràng buộc vào danh sách cụ thể, nhưng hãy nhớ rằng bạn vẫn có thể bắt được ClassCastException.

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