从Android中以编程方式创建的父视图中查找子视图

从Android中以编程方式创建的父视图中查找子视图,android,view,Android,View,对于Android应用程序,我使用GridView和扩展BaseAdapter来组织其内容。对于我在扩展BaseAdapter类中重写的函数getView,我创建了一个LinearLayout,并将一个ImageView和3个TextView附加到它。现在,我需要实现convertView,但因为我是以编程方式创建视图的,所以我不认为可以使用findViewById查找这些子视图来更改它们的属性(如文本和位图) 我的想法是在创建视图时为每个视图的不同类型分配一个唯一的ID(例如:给我的名字tex

对于Android应用程序,我使用GridView和扩展BaseAdapter来组织其内容。对于我在扩展BaseAdapter类中重写的函数getView,我创建了一个LinearLayout,并将一个ImageView和3个TextView附加到它。现在,我需要实现convertView,但因为我是以编程方式创建视图的,所以我不认为可以使用findViewById查找这些子视图来更改它们的属性(如文本和位图)

我的想法是在创建视图时为每个视图的不同类型分配一个唯一的ID(例如:给我的名字textview ID为1,描述textview ID为2,等等),但我不确定每个视图中的ID是否必须是唯一的,无论它们是否是同一种视图


最终,我如何找到一个子视图,该子视图是所有以编程方式创建的linearlayout视图的一部分?

您可以通过获取linearlayout的子视图,但很难区分您到底得到了哪个子视图

我认为分配ID是更好的方法。您可以为视图分配ID,然后通过
findViewById()
获取视图。对于每个线性布局,ID不需要是唯一的

大概是这样的:

// Give more sensible names to ID's
int IMAGEVIEW_ID = 0;
int TEXTVIEW1_ID = 1;
int TEXTVIEW2_ID = 2;
int TEXTVIEW3_ID = 3;

imageView.setId(IMAGEVIEW_ID);
textView1.setId(TEXTVIEW1_ID);
textView2.setId(TEXTVIEW2_ID);
textView3.setId(TEXTVIEW3_ID);

...
// somewhere later
ImageView imageView = (ImageView) convertView.findViewById(IMAGEVIEW_ID);

谢谢,它可以工作,不再因为没有重用我的视图而出现内存不足错误!。我也很失望,我不能用C++中的方法和Sergey Glotov值来创建枚举数,所以我只是创建了一个嵌套类,它具有最终的静态int VIENDATION并分配了它们的数字。@:“这是什么意思?”我也尝试了同样的方法,但是得到了一个空值。你能帮我个忙吗?(试过“LinearLayout”)@kAnNaN
convertView
是适配器的
getView(int位置,View convertView,ViewGroup父项)
方法的参数,而不是硬编码id号,你可以使用它来生成一个适合在setId(int)中使用的值。此值不会与aapt在构建时为R.ID生成的ID值冲突。