Android:自定义对象无法保留资源ID

时间:2015-02-19 07:22:13

标签: java android gridview android-resources resource-id

App在Gridview中显示图像。在GridView的适配器中,我从可用资源中随机生成了需要的图像数。创建了一个新的Integer[] imageIDs&这些资源ID保存在这个新数组中。我还想将此resourceID存储在扩展ImageView的ArrayList自定义对象ImageSourceObject中。我使用imgObj.setImageResource(imageIDs[i])设置了imageView。现在,当我在onTouch()getView()方法中检索此对象时,我希望获得与imageView集相同的资源,而我得到-1。

我认为当我通过setImageResource()设置ImageSourceObject的ImageView时,当我尝试检索ImageSourceObject的getId()时,我应该得到ImageView集的id。

代码:

    private void createObjectsArray() {
    int totalObjs = 15;
    Integer[] mThumbIds = {
            R.drawable.droid_1, R.drawable.droid_3,
            R.drawable.droid_2, R.drawable.ic_launcher
    };
    // Create new [] for imageIDs to store the resource ID as generated    
    imageIds = new Integer[totalObjs];
    // Create ArrayList of ImageSourceObject to set image & other proeprties 
    this.imgObjsArr = new ArrayList<ImageSourceObject>();

    Random random = new Random();
    int index;
    // Set Targets 
    for (int i=0; i < totalObjs; i++) {
        index = this.generateRandomNumber(0, (mThumbIds.length - 1), random);
        imageIds[i] = mThumbIds[index];
        ImageSourceObject iso = new ImageSourceObject(mContext);
        iso.setImageResource(imageIds[i]);
        imgObjsArr.add(iso);

        Log.d("GA", "ThumbIDS ID : " + mThumbIds[index] + " ImageIDs  : " + imageIds[i] + " ISO IMG ID : " + iso.getId());
    }
}

记录此代码:

02-19 12:21:38.780: D/GA(1613): ThumbIDS ID : 2130837557 ImageIDs  : 2130837557 ISO IMG ID : -1

您可以看到mThumbIDs&amp;的ID imageIDs值相同。但是对于设置图像后的iso对象,它也是-1 ??

ImageSourceObject的代码很简单:

public class ImageSourceObject extends ImageView {

private boolean touched;
private boolean targetObj;

public ImageSourceObject(Context context) {
    super(context);
    setTouched(false);
    setTargetObj(false); 
}

 .... Rest Getter & Setter methods

您能否告诉我为什么资源ID未在ImageSourceObject中设置?没有设置setImageResource ImageView的{​​{1}}图片,并保存所有资源???

非常感谢任何帮助。

由于

4 个答案:

答案 0 :(得分:1)

您需要使用iso.setId(int)来设置Id

答案 1 :(得分:1)

您提供的ID是您填充到ImageSourceObject(Drawable)的Image,它不是ImageSourceObject本身。 如果你想将id设置为这个数字,你应该这样做:

        iso.setImageResource(imageIds[i]);
        iso.setId(imageIds[i]);

答案 2 :(得分:1)

对于像你这样的程序创建的视图,如ImageSourceObject,你需要为它指定一个id.ignId(int id)。

如果您使用的是API级别17或更高级别,则可以使用View.generateViewId()生成合适的值。根据{{​​3}}:

  

此值不会与构建时生成的ID值冲突   为了R.id。

无论如何,根据documentation

考虑到这一点
  

标识符在此视图的层次结构中不必是唯一的。   标识符应为正数。

因此,可能会与您的ID发生冲突,Android会解析它们,为您提供在给定ID的层次结构中找到的第一个组件。

答案 3 :(得分:1)

使用setTag(tag)和getTag()方法设置对象:

iso.setTag(imageIds[i]); //to set the id to object

int tag=(Integer)iso.getTag();// to get the id from object