0

ArrayAdpater のサブクラスであるクラスがあり、それをパーケーブル化しようとしています。


「エラー:(21, 36) エラー: パーセラー: 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 に答える