【问题标题】:Cannot add list of objects to my collection无法将对象列表添加到我的收藏
【发布时间】:2016-11-06 20:56:28
【问题描述】:

在我的主要活动中,我有两个列表:

private List<Feed> feedItems;

private ArrayList<Object> adItems() {
    ArrayList<Object> adItems = new ArrayList<>();
    adItems.add("image");
    adItems.add("image");
    adItems.add("image");
    return adItems;
}

第一个列表代表我的 feedItems,它们取自我的网络模型。第二个列表只是静态图像的列表。我正在尝试设置原生广告,但我退后一步,只是向我的提要提供图像,以证明覆盖我的 RecyclerAdapter 以产生多个视图是有效的。

feedRecyclerAdapter = new FeedRecyclerAdapter(this, feedItems, new ImageLoader(new FeedItemFileCache(this)), adItems());

在这里,我将 FeedRecyclerAdapter 中的 adItems() 对象列表作为最后一个参数传递,并在适配器类本身的构造函数中调用它:

public FeedRecyclerAdapter(Context context, List<Feed> feedItems, ImageLoader feedItemImageLoader, List<Object> adItems) {
    this.context = context;
    this.feedItems = feedItems;
    this.feedItemImageLoader = feedItemImageLoader;
    feedItems.addAll(adItems);
}

最后一行feedItems.addAll(adItems); 是我收到以下错误消息的地方:

Error:(43, 18) error: no suitable method found for addAll(List<Object>)
method Collection.addAll(Collection<? extends Feed>) is not applicable
(argument mismatch; List<Object> cannot be converted to Collection<? extends Feed>)
method List.addAll(Collection<? extends Feed>) is not applicable
(argument mismatch; List<Object> cannot be converted to Collection<? extends Feed>)

我的 Feed 对象如下所示:

public class Feed {
    public static final String CLASS_NAME = "Feed";
    public static final String MARKET_CLASS_NAME = "MarketFeed";

    private String objectId;
    private String createdAt;
    /**
     * Can be a ParsePointer but we are using a relational include query to get the whole object
     */
    private Design designId;

    // Not part of the model, calculated at run time.
    private String timestampText;
    private boolean isInPersonalGallery;
    private boolean isLiked;
    private List<Comment> comments;

    // Related to Market Feed Items
    private DisplayedSide displayedSide = DisplayedSide.FRONT;

    public enum DisplayedSide {
        FRONT,
        BACK
    }

    public String getObjectId() {
        return objectId;
    }

    public Design getDesign() {
        return designId;
    }

    public Date getCreatedAt() {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
        Date date = null;
        try {
            date = dateFormat.parse(createdAt);
        } catch (ParseException e) {
            e.printStackTrace();
            Log.d("Feed", "Couldn't parse createdAt date when requested " + createdAt);
        }

        return date;
    }

    public String getTimestampText() {
        return timestampText;
    }

    public void setTimestampText(String timestampText) {
        this.timestampText = timestampText;
    }

    public boolean isInPersonalGallery() {
        return isInPersonalGallery;
    }

    public void setInPersonalGallery(boolean inPersonalGallery) {
        isInPersonalGallery = inPersonalGallery;
    }

    public boolean isLiked() {
        return isLiked;
    }

    public void setLiked(boolean liked) {
        isLiked = liked;
    }

    public List<Comment> getComments() {
        return comments;
    }

    public void setComments(List<Comment> comments) {
        this.comments = comments;
    }

    public DisplayedSide getDisplayedSide() {
        return displayedSide;
    }

    public void setDisplayedSide(DisplayedSide displayedSide) {
        this.displayedSide = displayedSide;
    }
}

总之,我试图在我的 Collection 中的主要对象 feedItems 之间添加一些图像或 adItems。为什么我不能简单地将它们附加到我的主列表中?而我能做些什么呢?

【问题讨论】:

  • A List&lt;Feed&gt; 应该只包含 Feed 对象。如果你想让它容纳任何东西,它必须是List&lt;Object&gt;
  • @bluemunch 你的类型不匹配
  • 您的错误本身描述了问题:参数不匹配; List 无法转换为 Collection
  • 我的问题是,如果我将 adItems 设为 Feed 对象列表,它们将具有 Feed 对象的所有属性,这是我不想要的。什么是替代方案?广告对象和 Feed 对象需要在同一个列表中。
  • 只要使用List&lt;Object&gt;,你就可以放任何你想要的东西。

标签: java android listview collections android-recyclerview


【解决方案1】:

你设置在错误的数组中

 feedItems.addAll(adItems);//you are set adItems in wrong arraylist (feedItems is a feetItem array list not a adItem list)

public FeedRecyclerAdapter(Context context, List<Feed> feedItems, ImageLoader feedItemImageLoader, List<Object> adItems) {
this.context = context;
this.feedItems = feedItems;
this.feedItemImageLoader = feedItemImageLoader;
feedItems.addAll(adItems);
}`

【讨论】:

  • 我想在 feedItems 列表中添加“addItems”。这是我的意图。
【解决方案2】:

在我的主要活动的 onCreate 方法中,我将 adItems 设置为 Feed 列表,然后将其传递给我的 RecyclerAdapter 构造函数:

List<Feed> adItems = new ArrayList<>();
feedRecyclerAdapter = new FeedRecyclerAdapter(this, feedItems, new ImageLoader(new FeedItemFileCache(this)), adItems);

在我的 RecyclerAdapter 类中,我将所有 adItems 添加到 feedItems 列表中,以便我可以对单个列表进行操作:

public FeedRecyclerAdapter(Context context, List<Feed> feedItems, ImageLoader feedItemImageLoader, List<Feed> adItems) {
    this.context = context;
    this.feedItems = feedItems;
    this.feedItemImageLoader = feedItemImageLoader;
    feedItems.addAll(adItems);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多