Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有没有办法为gridview上的每个项目分配id?_Android - Fatal编程技术网

Android 有没有办法为gridview上的每个项目分配id?

Android 有没有办法为gridview上的每个项目分配id?,android,Android,有没有办法为gridview上的每个项目分配id?我正在使用gridview,并按如下方式填充它: public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflator=LayoutInflater.from(this.mContext); View layout=inflator.inflate(R.layout.activity_main

有没有办法为gridview上的每个项目分配id?我正在使用gridview,并按如下方式填充它:

 public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflator=LayoutInflater.from(this.mContext);
        View layout=inflator.inflate(R.layout.activity_main, parent, false);
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(170, 170));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(4, 4, 4, 4);
        } else {
            imageView = (ImageView) convertView;
        }


        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {

            R.drawable.container_circle_blue,
            R.drawable.container_circle_dblue,
            R.drawable.container_circle_green,
            R.drawable.container_circle_yellow,
            R.drawable.container_circle_red,

            R.drawable.container_square_blue,
            R.drawable.container_square_dblue,
            R.drawable.container_square_green,
            R.drawable.container_square_yellow,
            R.drawable.container_square_red,



            R.drawable.container_hexagone_blue,
            R.drawable.container_hexagone_dblue,
            R.drawable.container_hexagone_green,
            R.drawable.container_hexagone_yellow,
            R.drawable.container_hexagone_red,

            R.drawable.container_star_blue,
            R.drawable.container_star_dblue,
            R.drawable.container_star_green,
            R.drawable.container_star_yellow,
            R.drawable.container_star_red,

            R.drawable.container_triangle_blue,
            R.drawable.container_triangle_dblue,
            R.drawable.container_triangle_green,
            R.drawable.container_triangle_yellow,
            R.drawable.container_triangle_red,
    };

我需要为每个项目添加一个Id,以便以后处理碰撞并与那里的每个图像视图和其他图像视图进行比较。位置有效地充当Id。或者我没有抓住要点?

您应该设置
标记,而不是为动态创建的视图分配Id

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflator=LayoutInflater.from(this.mContext);
    View layout=inflator.inflate(R.layout.activity_main, parent, false);
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(170, 170));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(4, 4, 4, 4);
    } else {
        imageView = (ImageView) convertView;
    }
    // set tag
    imageView.setTag(position);

    return imageView;
}
稍后在
onClick
onimclick
中获取视图时,可以执行以下操作-

public void onClick(View view) {
    Object tag = view.getTag();
    if (tag instanceOf Integer) {
        int pos = (Integer)tag;
        // use position to identify that item.
    }
}

由于您是新手,如果使用
Listview
,我建议您使用
RecyclerView
。如果仍然需要使用普通适配器,则使用
ViewHolder
模式。

我的想法是这样的:id=“circle\u blue\u container”和其他图像将具有相同的id,如果它们相等,则imageresource将更改,我正考虑这样做,因为每次应用程序打开时,gridview中元素的顺序发生了变化您还在寻找答案吗?或者你忘了接受投票结果?对不起,我忘了把它标记为正确答案