【发布时间】:2016-03-17 19:22:59
【问题描述】:
我在 onCreate() 中膨胀 layout,这已在我的活动中声明:
layout = (RelativeLayout) findViewById(R.id.layout);
假设 id 在我的活动中被声明为 int。
稍后,在某些事件之后,我将一个图像视图添加到此 布局
id = (int) Calendar.getInstance().getTimeInMillis();
ImageView imageView = new ImageView(context);
imageView.setImageResource(R.drawable.ic_launcher);
imageView.setId(id);
layout.addView(imageView);
稍后,我想从我们之前设置的 id 中获取 imageView:
ImageView imageView = (ImageView) findViewById(id);
if (imageView == null)
Log.e("Test", "imageview is null");
所有代码都成功运行,Imageview 总是返回 null,如日志中打印的那样。
注意:我无法保留 imageview 本身的对象,因为我在实际项目中有许多不同的视图。在这里,我使用单个 imageview 描述了我的问题。我已经存储了视图的所有 ID,但无法使用 findViewById() 获取所有这些视图。我之所以使用 Calendar.getInstance().getTimeInMillis() 来生成 id 是因为我每次都想要一个唯一的 id。我已经存储了所有布局数据,包括 id 以供以后使用。如果用户再次打开此活动,他将从他离开的地方开始。因此,在添加任何新的 imageview 时,不得重复之前生成的 id。
关键点:如果我将设备日期时间提前 2-3 天或更早,那么它可以正常工作。我认为问题在于使用日历生成 id。
【问题讨论】:
-
正确阅读问题。我不能这样做,因为我使用的是多个视图而不是单个图像视图。
-
我希望您不会对所有图像视图使用相同的 id,是吗?
-
显然不是。即使我使用相同,为什么我会得到 null?
-
您能否展示更多代码,例如如何生成和设置 id?
-
问题中都提到了。
标签: android android-layout view findviewbyid