将Int转换为ImageView

时间:2016-07-07 15:02:44

标签: java android android-studio

以下是一些代码:

public class Article {
(...)
private static int[] sImages =  { R.drawable.ic_picture};
private ImageView mImage;
public Article(int a)
{
    mImage = sImages[a];
}

在: mImage = sImages[a]; 有这个错误:

  

不兼容的类型
  必需:android.wiget.ImageView
  发现:Int

如何将int转换为android.widget.ImageView或类似的东西?

(我创建了RecyclerView,其中有很多ImageView,我希望将List with Images与这些ImageViews一起使用。)

3 个答案:

答案 0 :(得分:2)

您可以使用setImageResource。当您调用您的Article类时,也会传递视图。

private static int[] sImages =  { R.drawable.ic_picture};
private ImageView mImage;
public Article(int a,  View view)
{
    mImage = (ImageView) view.findViewById(R.id.image);
    mImage.setImageResource(sImages[a]);
}

答案 1 :(得分:0)

如果您有一个列表,则必须编写一个RecyclerAdapter类来保存和设置列表项。

看到这个: Using lists and grids in Android with RecylerView - Tutorial

答案 2 :(得分:0)

您的代码块显示了一个Article类,它应该附加到RecyclerView并带有相应的图像,这是我从您的问题中假设的。 在你的评论中你有

for (int i = 0; i < 30; ++i) { articles.add(new Article(i))}

  1. 您将30设置为硬编码限制,而应将其设置为图像ID数组的大小。
  2. 您知道在添加文章之前您正在递增索引,这会导致您丢失索引0处的ID。
  3. 所有这一切都是通过你的构造函数传递int来获取Article class中该数组索引的id,你不应该在对象类中拥有static个数组。
  4. 将您的Article课程改为:

    public class Article {
        ...
        int imageID;
        public Article(int imageID) {
            this.imageID = imageID;
        }
        public int getImageID() {
            return imageID;
        }
       ...
    }
    

    现在当你循环并添加你的文章时,它应该是这样的:

    for (int i = 0; i < imageIDArray.length; i++) {
        articles.add(new Article(imageIDArray[i]);
    }
    

    现在,您将imageID设置为imageIDArrayonBindViewHolder()的{​​{1}}方法中的任何值,然后您可以轻松设置RecyclerView使用

    创建正确的图像

    setImageDrawable(ContextCompat.getDrawable(context, article(i).getImageID));