Android 动态创建的ImageView的id始终为-1

Android 动态创建的ImageView的id始终为-1,android,Android,我试图将动态创建的ImageViewid存储在列表中,但下面总是给出-1 ImageView image = new ImageView (this); image.getId(); id-是唯一的名称。在获得它之前,必须先添加它。您还必须知道,所有id-s和资源都只是R.class中的常量(int)。因此,如果未添加id,则它是-1。id-是唯一的名称。在获得它之前,必须先添加它。您还必须知道,所有id-s和资源都只是R.class中的常量(int)。因此,如果未添加id,则id为-1。id

我试图将动态创建的
ImageView
id存储在列表中,但下面总是给出
-1

ImageView image = new ImageView (this);
image.getId();

id-是唯一的名称。在获得它之前,必须先添加它。您还必须知道,所有id-s和资源都只是R.class中的常量(int)。因此,如果未添加id,则它是-1。

id-是唯一的名称。在获得它之前,必须先添加它。您还必须知道,所有id-s和资源都只是R.class中的常量(int)。因此,如果未添加id,则id为-1。

id通常是布局中指定的值。在以编程方式创建视图时,您需要负责分配一个
image.setId()
。您可以使用
View.generateView()
生成un,如下所示:

image.setId(View.generateViewId());

请注意,
View.generateViewId()
仅从API 17+开始存在。

Id通常是布局中的指定值。在以编程方式创建视图时,您需要负责分配一个
image.setId()
。您可以使用
View.generateView()
生成un,如下所示:

image.setId(View.generateViewId());

请注意,
View.generateViewId()
仅在API 17+以后才存在。

从API级别17及以上,您可以调用View.generateViewId()并使用View.setId(int)进行设置。

从API级别17及以上,您可以调用View.generateViewId()并使用View.setId(int)进行设置.

此行为是预期的,因为您尚未设置ID。如果您想识别动态添加的视图,可以通过设置标记和/或ID两种方式进行识别

标签

身份证


此行为是预期的,因为您尚未设置ID。如果您想标识动态添加的视图,可以通过设置标记和/或ID两种方式进行标识

标签

身份证


这正是我们所期望的<代码>视图没有ID,除非您在代码或布局XML中为它们分配了ID
-1
视图。没有ID
。谢谢,这是否意味着我必须管理创建的ImageView的唯一ID的创建,或者android API提供了解决方法?可能。这取决于你的需要。如果您以其他方式保留对
视图的引用,例如,将它们保存到数组、
列表等,则不必为它们分配ID。如果您需要使用
findViewById()
,或者仅通过ID来区分
视图
,那么是的,您必须确保它们在相关层次结构中是唯一的。抱歉,伙计们,是的,我还没有读过API 17+,我需要保留一个ID的数组列表,如果一些动态创建的ImageView,如果只是在类中保留一个静态int变量并开始从0分配ID,你们是否看到了任何问题?这些ID可能与AAPT生成的ID冲突。在这种情况下,最好使用下面@AalapPatel答案中所述的标记。这正是预期的<代码>视图
没有ID,除非您在代码或布局XML中为它们分配了ID
-1
视图。没有ID
。谢谢,这是否意味着我必须管理创建的ImageView的唯一ID的创建,或者android API提供了解决方法?可能。这取决于你的需要。如果您以其他方式保留对
视图的引用,例如,将它们保存到数组、
列表等,则不必为它们分配ID。如果您需要使用
findViewById()
,或者仅通过ID来区分
视图
,那么是的,您必须确保它们在相关层次结构中是唯一的。抱歉,伙计们,是的,我还没有读过API 17+,我需要保留一个ID的数组列表,如果一些动态创建的ImageView,如果只是在类中保留一个静态int变量并开始从0分配ID,你们是否看到了任何问题?这些ID可能与AAPT生成的ID冲突。在这种情况下,最好使用下面@AalapPatel答案中所述的标签。
 image.setId(CONSTANT_ID_VALUE);

 //somewhere else in the code to find this view (use rootView if fragment else its fine with just findViewWithTag method)
 ImageView image = rootView.findViewById(CONSTANT_ID_VALUE);