传递ArrayList <? 实现Parcelable>到Activity

我已经search了几个主题,但没有find解决我的问题。

public class Series implements Parcelable { private String name; private int numOfSeason; private int numOfEpisode; /** Constructors and Getters/Setters have been removed to make reading easier **/ public Series(Parcel in) { String[] data = new String[3]; in.readStringArray(data); this.name = data[0]; this.numOfSeason = Integer.parseInt(data[1]); this.numOfEpisode = Integer.parseInt(data[2]); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeStringArray(new String[] { this.name, String.valueOf(this.numOfSeason), String.valueOf(this.numOfEpisode) }); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Series createFromParcel(Parcel in) { return new Series(in); } @Override public Series[] newArray(int size) { return new Series[size]; } }; 

}

在我的MainActivity中,我有一个ArrayList。 要使列表dynamic可编辑,我需要将其传递给另一个可以编辑它的活动。

 ArrayList<Series> listOfSeries = new ArrayList<Series>(); public void openAddActivity() { Intent intent = new Intent(this, AddActivity.class); intent.putParcelableArrayListExtra( "com.example.episodetracker.listofseries", (ArrayList<? extends Parcelable>) listOfSeries); startActivity(intent); } 

我需要转换列表,否则Eclipse给我下面的错误信息。 参数(String,List)不适用于types为Intent的putParcelableArrayListExtra(String,ArrayList)方法,

这是正确的方法吗?

  ArrayList<Series> list = savedInstanceState .getParcelableArrayList("com.example.episodetracker.listofseries"); 

这是我尝试在另一个活动中读取数据的方式。

它在上面的线上崩溃。 即getParcelableArrayList部分。

  • 问题在于写出包裹并从包裹中读入…

     @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(numOfSeason); dest.writeInt(numOfEpisode); } private void readFromParcel(Parcel in) { name = in.readString(); numOfSeason = in.readInt(); numOfEpisode = in.readInt(); } 
  • 你写出的内容必须与你阅读的内容相符

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(this,SecondActivity.class); ArrayList<testparcel> testing = new ArrayList<testparcel>(); i.putParcelableArrayListExtra("extraextra", testing); startActivity(i); } /**********************************************/ public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra"); } } 
  • 上面的代码是有两个不同的活动onCreate()。 第一个启动第二个; 而且它工作正常,我能够没有问题地拉动parcelable。

我从Bundle对象中使用putParcelableArrayList(<? extends Parcelable>) 。 不是直接从一个意图对象(我不知道有什么区别)。 但我用这种方式使用:

 ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>(); resultSet = loadData(); Bundle data = new Bundle(); data.putParcelableArrayList("search.resultSet", resultSet); yourIntent.putExtra("result.content", data); startActivity(yourIntent); 

稍后在新的活动中,您可以填充最近插入Bundle对象的数据,如下所示:

 Bundle data = this.getIntent().getBundleExtra("result.content"); ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset"); 

只要记住你的ArrayList<>只能包含parcelable对象。 只是为了确保你已经通过了数据,你可以检查收到的数据是否为空,只是为了避免问题。

您应该在Intent类上使用putParcelableArrayListExtra()方法。

也许这有助于别人..否则我的问题是,我用写和readValue,但它应该匹配types像写入,readInt writeString,readString等等