我在我的Android项目中使用了Android注释。由于实现Parcelable是很多工作,所以我想使用Parceler和@Parcel注释。
问题是,如果我想通过Android注释使用@FragmentArg注释,它就不会(出于显而易见的原因)认识到类将使用实现的Parcelable接口生成。我现在有两个问题:
到目前为止,我的片段代码如下所示:
@EFragment(R.layout.fragment_faq)
public class FaqFragment extends ListFragment {
@FragmentArg
ArrayList<FaqItemImpl> faqItems;
// ...
}生成的POJO类使用@Parcel进行注释:
@Parcel
public class FaqItemImpl implements FaqItem {
protected String iconURL;
protected String title;
protected String question;
protected String answer;
protected ArrayList<FaqItemImpl> faqChildren;
// ...
}在生成的FaqFragment_中,有趣的部分是:
// ...
public FaqFragment_.FragmentBuilder_ faqItems(ArrayList<FaqItemImpl> faqItems) {
args.putSerializable(FAQ_ITEMS_ARG, faqItems);
return this;
}
// ...如您所见,生成的类将POJO作为可序列化的.
发布于 2015-04-17 05:26:43
可以使用的一种方法是让AA处理Parcelable的切换,让Parceler执行序列化/反序列化。Parceler的一个好特性是它将为您处理集合序列化,因此AA只需处理一个Parcelable。这将有效地避免任何对生成代码的引用,当然,除了AA的下划线类。
我的意思是:
@EFragment(R.layout.fragment_faq)
public class FaqFragment extends ListFragment {
@FragmentArg
Parcelable faqParcelable;
public void useFaq(){
List<FaqItemImpl> faqItems = Parcels.unwrap(faqParcelable);
// ...
}
}然后,当您准备构建FaqFragment时,您只需让Parceler包装您的列表:
FaqFragment_.builder()
.faqParcelable(Parcels.wrap(faqItems))
.build();是的,这种方法不像AA为您做包装/解包调用那样好,但是它应该能工作。
编辑
通过与Android注释团队的合作,我们为@Extra、@FragmentArg和@SavedInstanceState带注释的字段添加了Parceler支持。这意味着OP所需的功能已经到位。这应该是可行的:
@EFragment(R.layout.fragment_faq)
public class FaqFragment extends ListFragment {
@FragmentArg
ArrayList<FaqItemImpl> faqItems;
// ...
}发布于 2015-04-16 15:58:53
https://stackoverflow.com/questions/29674199
复制相似问题