我在我的android项目中使用android注释。由于实现parcelable需要做很多工作,所以我想使用parceler和@parcel注释。
问题是,如果我想使用android注解中的@fragmentarg注解,它不会(出于明显的原因)意识到类将由实现的parcelable接口生成。
我现在有两个问题:
Parceler把生成的类放在哪里以便我可以使用它们?在parceler.org上声明:“要使用生成的代码,可以直接引用生成的类,或者通过parcels实用程序类引用”
有没有其他方法可以使用parceler或任何生成带有android注释的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当作可序列化的。
最佳答案
您可以使用的一种方法是让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为您发出wrap/unwrap调用那么好,但它应该可以工作。
编辑:
与android注释团队合作,我们为带注释的字段添加了parceler支持。这意味着op所需的功能已经就位。这应该有效:
@EFragment(R.layout.fragment_faq)
public class FaqFragment extends ListFragment {
@FragmentArg
ArrayList<FaqItemImpl> faqItems;
// ...
}
关于android - 使用带有Parceler的Android注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29674199/