2011-11-13 32 views
9

Tôi biết bạn có thể chuyển vào danh sách chuỗi của chuỗi thông qua ý định, nhưng nếu đó là danh sách mảng của một số đối tượng mà tôi đã xác định? Nói một danh sách mảng của Bicyles, làm cách nào để làm điều này?Array Danh sách các đối tượng thông qua mục đích

+0

Bạn có thể tham gia một lớp tĩnh –

Trả lời

17

Bạn có thể làm cho các đối tượng của mình thực hiện Bưu kiện và sử dụng putParcelableArrayListExtra. Ngoài ra, bạn có thể tuần tự hóa các đối tượng của bạn theo một cách nào đó và đặt mảng byte của các đối tượng được tuần tự hóa của bạn.

+11

một số mã ví dụ sẽ giúp – adit

+0

@adit - Để có ví dụ về cách làm một điều gì đó Khéo léo, hãy xem [tài liệu cho Bưu kiện] (http://developer.android.com/reference/android/os/Parcelable.html). Sau đó, bạn có thể sử dụng một ArrayList trong một cuộc gọi đến 'putParcelableArrayListExtra()'. –

+0

có vấn đề như đối tượng của tôi có một đối tượng Location, do đó, không thực sự biết làm thế nào để xử lý này trong phương pháp writeToParcel – adit

17

Đây là một ví dụ. MainActivity gửi danh sách người đến OtherActivity qua Intent.

class Person implements Serializable { 
    int id; 
    String name; 

    Person(int i, String s) { 
     id = i; 
     name = s; 
    } 
} 

public class TestAndroidActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ArrayList<Person> list = new ArrayList<Person>(); 
     list.add(new Person(1, "Tom")); 
     list.add(new Person(5, "John")); 

     Intent intent = new Intent(this, OtherActitity.class); 
     intent.putExtra("list", list); 
     startActivity(intent); 

OtherActivity.java

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class OtherActitity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.other); 

     Intent i = getIntent(); 
     ArrayList<Person> list = (ArrayList<Person>) i 
       .getSerializableExtra("list"); 
     Toast.makeText(this, list.get(1).name, Toast.LENGTH_LONG).show(); 

    } 
} 
+4

Lưu ý rằng việc sử dụng * Serializable * cho việc này liên quan đến một hình phạt hiệu suất, vì vậy bạn thực sự nên sử dụng * Parcelable *. – JimmyB

+0

Cảm ơn bạn đã cung cấp thông tin. – wannik

+5

'intent.putExtra (" danh sách ", danh sách);' cung cấp cho tôi một lỗi: 'không thể giải quyết phương thức' –

3

Một ý tưởng tốt hơn là thực hiện giao diện Parcelable cho đối tượng mà ArrayList bạn muốn đưa vào mục đích? .Đối Ví dụ:

public class Person thực hiện Parcelable {

private int id; 
private String name; 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
@Override 
public int describeContents() { 
    return this.hashCode(); 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(id); 
    dest.writeString(name); 
} 

}

Và sau đó, mã ứng dụng bạn có thể nói:

bundle.putParcelableArrayList ("personList", personList);

+0

Đó là câu trả lời đầu tiên. –

6

Một trong nhiều cách - bạn có thể serialize danh sách các đối tượng vào một số loại chuỗi đại diện (để cho nó được JSON) và sau đó lấy giá trị chuỗi trở lại danh sách

// here we use GSON to serialize mMyObjectList and pass it throught intent to second Activity 
String listSerializedToJson = new Gson().toJson(mMyObjectList); 
intent.putExtra("LIST_OF_OBJECTS", listSerializedToJson); 
startActivity(intent); 

// in second Activity we get intent and retrieve the string value (listSerializedToJson) back to list 
String listSerializedToJson = getIntent().getExtras().getString("LIST_OF_OBJECTS"); 
mMyObjectList = new Gson().fromJson(objectsInJson, MyObject[].class); // in this example we have array but you can easy convert it to list - new ArrayList<MyObject>(Arrays.asList(mMyObjectList)); 
Các vấn đề liên quan