2017-05-04 90 views
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(); 
    } 
}; 

我想避免使用靜態上下文變量。

回答

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); 
+0

都能跟得上我仍然得到同樣的錯誤。 –

+0

這意味着你仍然試圖在生成的Parcelable中包含Context對象。你是否註釋過對話?注意我在示例中刪除了該註釋。 –