我如何处理上下文?

时间:2017-05-04 04:07:18

标签: parceler

我有一个类是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();
    }
};

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

1 个答案:

答案 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);