我昨天开始工作,我在Code中进行了一些重组,现在有些东西不能用了。看了一会儿,我找不到问题了。
我将Parcelables的ArrayList传递给一个活动:
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();
//...
Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putParcelableArrayListExtra(Constants.FOO, myArrayListOfParcelables);
startActivity(intent);
接收器:
ArrayList<Parcelable> parcelableList = (ArrayList<Parcelable>)getIntent().getParcelableArrayListExtra(Constants.FOO);
parcelableList总是为null,虽然我发送了一个。
MyParcelable当然扩展了Parcelable。我已经测试过使用putExtra
传递MyParcelable的一个对象,它始终有效:
Parcelable p = (Parcelable)getIntent().getExtras().getParcelable(Constants.BAR);
或
MyParcelable p = (MyParcelable)getIntent().getExtras().getParcelable(Constants.BAR);
我在MyParcelable的代码中放了一些调试消息,我看到在传递列表时只执行了写入方法,但它从未开始读取,甚至不执行createFromParcel
。这是什么?
答案 0 :(得分:0)
我假设你有一个创作者,如果没有,请创建一个。然后我会这样尝试:
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();
//...
Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putIntExtra(Constants.FOO_COUNT, myArrayListOfParcelables.size());
MyParcelable p;
for (int i = 0; i < myArrayListOfParcelables.size(); i++){
p = myArrayListOfParcelables.get(i);
intent.putParcelableExtra(Constants.FOO + "_" + i, p);
}
startActivity(intent);
然后再读一遍:
Intent intent = getIntent();
int cnt = intent.getIntExtra(Constants.FOO_COUNT);
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(cnt);
MyParcelable p;
for (int i = 0; i < cnt; i++){
p = (MyParcelable)intent.getParcelableExtra(Constants.FOO + "_" + i);
myArrayListOfParcelables.add(p);
}
通过这种方式,您可以看到更好的内容。可能是您的Parcelables数组太大而无法获得Parceled。我尝试过一次Bitmap并遇到类似的问题。