0

我有一个类,它是 ArrayAdpater 的子类,我正试图使它成为可解析的。

我不断收到此错误
“错误:(21、36)错误:Parceler:无法找到类型为 android.content.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();
    }
};

我试图避免使用静态上下文变量。

4

1 回答 1

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);
于 2017-05-04T18:19:23.933 回答