方法取決於什麼是電影列表...
- 如果你的電影列表是一個簡單的字符串的ArrayList然後使用
putStringArrayListExtra
和getStringArrayListExtra
。
- 如果它們是對象(單獨的類),那麼你應該實現 Parcelable和使用
putParcelableArrayListExtra
和 getParcelableArrayList
。
如果電影名稱是那麼的對象/類實現Parcelable
import android.os.Parcel;
import android.os.Parcelable;
public class MovieName implements Parcelable {
private String name;
private String year;
public MovieName(String name, String year) {
this.name = name;
this.year = year;
}
public MovieName(Parcel in) {
name = in.readString();
year = in.readString();
}
// Creator
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public MovieName createFromParcel(Parcel in) {
return new MovieName(in);
}
public MovieName[] newArray(int size) {
return new MovieName[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(year);
}
@Override
public String toString() {
return "MovieName=[name=" + name + ";year=" + year + "]";
}
}
裏面MainActivity
當你即將startActivity
去DetailActivity
Intent intent = new Intent(view.getContext(), DetailActivity.class);
ArrayList<String> movieNames = new ArrayList<String>();
movieNames.add("Star Wars");
movieNames.add("Transporter");
movieNames.add("Need for Speed");
intent.putStringArrayListExtra("MOVIE_NAMES", movieNames);
Log.d("Movie Names", "Writing into intent ... " + movieNames.toString());
ArrayList<MovieName> movieNameList = new ArrayList<MovieName>();
movieNameList.add(new MovieName("Star Wars", "1900"));
movieNameList.add(new MovieName("Transporter", "2000"));
intent.putParcelableArrayListExtra("movie", movieNameList);
Log.d("MovieName Parcelable", "Writing into intent ... " + movieNameList.toString());
startActivity(intent);
內DetailActivity's onCreate
ArrayList<String> movieNames = getIntent().getStringArrayListExtra("MOVIE_NAMES");
Log.d("Movie Names", "Reading from intent ... " + movieNames.toString());
ArrayList<MovieName> movieNameList = getIntent().getExtras().getParcelableArrayList("movie");
Log.d("MovieName Parcelable", "Reading from intent ... " + movieNameList.toString());
樣品試驗
07-25 16:32:53.108 5264-5264/? D/Movie Names: Writing into intent ... [Star Wars, Transporter, Need for Speed]
07-25 16:32:53.111 5264-5264/? D/MovieName Parcelable: Writing into intent ... [MovieName=[name=Star Wars;year=1900], MovieName=[name=Transporter;year=2000]]
07-25 16:32:53.144 5264-5264/? D/Movie Names: Reading from intent ... [Star Wars, Transporter, Need for Speed]
07-25 16:32:53.145 5264-5264/? D/MovieName Parcelable: Reading from intent ... [MovieName=[name=Star Wars;year=1900], MovieName=[name=Transporter;year=2000]]
來源
2017-07-25 23:11:30
JRG
你不能簡單地傳遞對象,你需要讓你的對象類實現Parcelable,然後如果你傳遞一個對象,使用putExtra,並且如果你傳遞數組,請使用putParcelableArrayListExtra – MoGa
@the_prole - 你有機會檢查我的解決方案(電影名稱爲字符串或一個對象/類)?如果它工作,請接受答案並投票。謝謝! – JRG
@JRG你沒有真正回答這個問題。我通過一個意圖傳遞數組列表。答案是否定的,數組列表不是相同的對象。傳遞的數組列表正在從宗地重建,並且是一個全新的對象。謝謝你嘗試。 –