我有一个类是ArrayAdpater的子类,我正试图让它成为parcable。
我一直收到这个错误 “错误:(21,36)错误:Parceler:无法找到android.content.Context context”的类型android.content.Context的读/写生成器“
这是班级:
@org.parceler.Parcel
public class conversation_pager extends ArrayAdapter<String> {
private final ArrayList<String> messages;
private Context context;
@ParcelConstructor
public conversation_pager(Context context) {
super(context, -1);
// Initilize our variables
this.context = context;
this.messages = null;
}
public void addMessage(String user, String message) {
// Calm the linter down about a NUllPointerException.
if (messages == null) {
return;
}
// Add the message.
messages.add("<%s> %s".format(user, message));
notifyDataSetChanged();
}
};
我试图避免使用静态上下文变量。
答案 0 :(得分:0)
你不应该通过Parcelable
传递上下文。您需要重新编写@Parcel
对象以仅保存数据并在需要的情况下传递上下文。可能像以下一样?:
public class ConversationPager extends ArrayAdapter<String> {
private final List<String> messages;
private fianl Context context;
public ConversationPager(Context context, List<Messages> messages) {
super(context, -1);
// Initilize our variables
this.context = context;
this.messsages = messages;
}
public ConversationPager(Context contex) {
this(context, new ArrayList<String>());
}
public void addMessage(String user, String message) {
// Calm the linter down about a NUllPointerException.
if (messages == null) {
return;
}
// Add the message.
messages.add("<%s> %s".format(user, message));
notifyDataSetChanged();
}
public List<String> getMessages() {
return messages;
}
};
然后你可以直接打包/解包邮件:
ConversationPager pager = new ConversationPager(context);
// Add some messages
// Parcel messages directly
Parcels.wrap(pager.getMessages();
// Then unwrap in the receiving context:
List<String> messages = Parcels.unwrap(incomingParcelableExtra);
ConversationPager
pager = new ConversationPager(context, messages);