2011-07-01 20 views
35

Powiel możliwe:
How to put a List in intentIntent.putExtra Lista

Chcę przekazać Lista od jednej czynności do drugiej. Do tej pory nie udało mi się. To jest mój kod.

//desserts.java

private List<Item> data; 

@Override 
public void onCreate(Bundle icicle) { 
//Code 
data.add(new Item(10, "dessert1")); 
data.add(new Item(11, "dessert2")); 
data.add(new Item(12, "dessert3")); 
data.add(new Item(13, "dessert4")); 
data.add(new Item(14, "dessert5")); 
data.add(new Item(15, "dessert6")); 
data.add(new Item(16, "dessert7")); 
data.add(new Item(17, "dessert8")); 
data.add(new Item(18, "dessert9")); 
data.add(new Item(19, "dessert10")); 
data.add(new Item(20, "dessert11")); 

//Some more code 
} 

@Override 
public void onClick(View v) { 
Intent view_order_intent = new Intent(this, thirdpage.class); 
view_order_intent.putExtra("data", data); 
startActivity(view_order_intent); 
} 

Ale nie jestem w stanie umieścić dane ten sposób. Zadałem to pytanie earlier, ale niewiele się wydarzyło.
Uprzejmie pomoc. Pomóż mi również uzyskać danych w następnej czynności.

+3

Pomoc zostanie doceniona. Komentarze takie jak te nie pomogą. –

Odpowiedz

81

Zakładając, że lista jest listą ciągów udostępniania danych ArrayList<String> i używać intent.putStringArrayListExtra("data", data)

Oto szkielet kodu trzeba:

  1. listy Declare

    private List<String> test; 
    
  2. Lista Init w odpowiednim miejscu

    test = new ArrayList<String>(); 
    

    i dodaj dane odpowiednio do test.

  3. Przełęcz intencyjny w następujący sposób:

    Intent intent = getIntent(); 
    intent.putStringArrayListExtra("test", (ArrayList<String>) test); 
    
  4. Pobieranie danych w następujący sposób:

    ArrayList<String> test = getIntent().getStringArrayListExtra("test"); 
    

nadzieję, że pomoże.

+0

Masz na myśli, że powinienem zadeklarować go jako ArrayList lub zainicjować jako ArrayList? –

+0

@Stone Zobacz edycję. – Mandel

+1

Ale w ten sposób mogę wstawić tylko jedną pozycję na liście. Chcę dwa ciągi, które otrzymuję przez obiekt obiektu. –

0
//To send from the activity that is calling another activity via myIntent 

    myIntent.putExtra("id","10"); 
    startActivity(myIntent); 

    //To receive from another Activity 

      Bundle bundle = getIntent().getExtras(); 
      String id=bundle.getString("id"); 
+2

Jak przesłać dane, które są listą? Co to jest "10"? –

+0

id to ciąg, który możesz pobrać z niego. A 10 to dane, które wysyłasz. W ostatnim wierszu, jeśli wybierzesz identyfikator, otrzymasz 10, który pochodzi od aktywisty dzwoniącego – Rasel

+0

Tak, próbowałem tego, tak jak napisałem w moim kod. Nie pomogło. –

8

można to zrobić na dwa sposoby: za pomocą

  • Serializable

  • Parcelable.

Ten examle pokaże, jak wdrożyć je serializable

class Customer implements Serializable 
{ 
    // properties, getter setters & constructor 
} 

// This is your custom object 
Customer customer = new Customer(name, address, zip); 

Intent intent = new Intent(); 
intent.setClass(SourceActivity.this, TargetActivity.this); 
intent.putExtra("customer", customer); 
startActivity(intent); 

// Now in your TargetActivity 
Bundle extras = getIntent().getExtras(); 
if (extras != null) 
{ 
    Customer customer = (Customer)extras.getSerializable("customer"); 
    // do something with the customer 
} 

Teraz spojrzeć na this. Ten link daje krótki przegląd jak wdrożyć go Parcelable.

Spójrz na this.. Ta dyskusja pozwoli ci zorientować się, która metoda jest o wiele lepsza.

Dzięki.

+1

To nie odpowiada na pytanie, jak umieścić LISTĘ w intencji. Tylko w jaki sposób umieścić pojedynczy element w intencji. –

+0

@ N-JOY czy masz przykładowy kod 'coś z klientem' ... w jaki sposób przechodzę przez model klienta i otrzymuję informacje o każdym? Wielkie dzięki. – Woppi

13

Jeśli użyjesz ArrayList zamiast listy, wtedy również twój problem zostanie rozwiązany. W swoim kodzie modyfikuj tylko listę w ArrayList.

private List<Item> data; 
+0

Później możesz odczytać listę według 'ArrayList items = (ArrayList ) getArguments(). GetSerializable (EXTRA_ITEMS);'. – CoolMind