2011-06-30 12 views
6

Mam listę w jednym z moich działań i muszę przekazać ją do następnej czynności.Jak umieścić listę w intencji

private List<Item> selectedData; 

Próbowałem oddanie tego w intencji przez:

intent.putExtra("selectedData", selectedData); 

Ale to nie działa. Co można zrobić?

+0

Jak dokładnie to nie działa? –

+0

Mówi ** Intencja nie dotyczy argumentów (String, List ** –

Odpowiedz

8

Najpierw należy utworzyć instancję typu List. List sam w sobie jest interfejsem.

Jeśli w twoim obiekcie znajduje się implement the Parcelable interface, możesz użyć metody putParcelableArrayListExtra(), aby dodać ją do.

+0

Czy mogę podać przykład? –

+1

Nie, próbowałem go.Nie działa.Próbowałem również ** view_order_intent.putParcelableArrayListExtra ("selectedData", (ArrayList ) selectedData); ** Nie wyszło żadnych błędów, ale nie jestem w stanie Aby uzyskać to. –

+0

** selectedData = bundle.getParcelableArrayList ("selectedData"); ** Próbowałem tego, aby uzyskać kod .Nie pracowałem –

4

Myślę, że pozycja powinna być parcelable. i powinieneś użyć tablicy listy zamiast listy. następnie użyj intent.putParcelableArrayListExtra

+0

Przykład będzie naprawdę użyteczny –

+1

Możesz także uczynić element implementujący 'Serializable' i stanie się banalny – howettl

10

Podobnie jak komentarz wspomniany w komentarzu, jeśli sprawisz, że obiekt, który trzymasz na swojej liście, będzie mógł być serializowany, stanie się bardzo łatwy. Następnie możesz umieścić go w pakiecie, który możesz następnie umieścić w intencji. Oto przykład:

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

Właściwie musi to być 'b.putSerialzeable (" key ", l)' i powinno być zauważyłem, że aby uzyskać dostęp do twojej listy w innym działaniu, musisz zrobić: 'List listExtra = (ArrayList ) (intent.getBundleExtra (" LISTA ") getSerializable (" key "))'. Wciąż jest to znacznie łatwiejsze niż implementowanie możliwości parowania dla Twojej ExampleClass. – Ridcully

1

To właśnie dla mnie zadziałało.

//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() + ""); 
     } 

Mam nadzieję, że to działa również dla Ciebie.

0

Wszyscy mówią, że możesz używać Serializable, ale żaden z nich nie wspomniał, że możesz po prostu rzucić wartość Serializable zamiast listy. wymienia implementacje

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

rdzenia już wdrożyć Serializable, więc nie jesteś zobowiązany do konkretnej implementacji listy, ale należy pamiętać, że nadal można złapać ClassCastException.