Java Android-动态创建时,文本视图不可见

Java Android-动态创建时,文本视图不可见,java,android,textview,Java,Android,Textview,我正在尝试制作一个应用程序,让用户存储和保存联系人。它可以保存,但在列表中有问题 我有一个for循环,它在数据库中运行,并为每个联系人(每行)打印一组数据、一个图像(实际上是一个字符串,因为它通过了路径)和一个字符串。它在滚动视图中打印它们,每个联系人都有一个线性布局(每个联系人都有自己的线性布局,因此我可以让每个联系人占据一行)。图像出来了,但是文本视图却找不到了 使用log.d(textview.getText());它确认已创建TextView并占用空间。 两个带有姓名的“联系人”,未打印

我正在尝试制作一个应用程序,让用户存储和保存联系人。它可以保存,但在列表中有问题

我有一个for循环,它在数据库中运行,并为每个联系人(每行)打印一组数据、一个图像(实际上是一个字符串,因为它通过了路径)和一个字符串。它在滚动视图中打印它们,每个联系人都有一个线性布局(每个联系人都有自己的线性布局,因此我可以让每个联系人占据一行)。图像出来了,但是文本视图却找不到了

使用log.d(textview.getText());它确认已创建TextView并占用空间。 两个带有姓名的“联系人”,未打印出来。中间的空间由textview预设。 另外两个“联系人”,但没有姓名。他们之间没有空隙。或者至少是一个小得多的空间。 代码:

DatabaseHandler db=新的DatabaseHandler(此);
int a=(int)(长)db.countRows();
LinearLayout布局=(LinearLayout)findViewById(R.id.contactsList);

对于(int i=0;i您可能需要调用requestLayout();以更新当前视图布局

theLayout.requestLayout();
此外,您似乎正在使用布局参数创建宽度为0、高度为0的视图:

LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);

仔细检查您应用于联系人列表的
线性布局的方向

您正在为您的
TextView
设置错误的
LayoutParams
。您正在使您的
TextView
0px乘以0px,权重为1

LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);
tv.setLayoutParams(vp2);
尝试使用一个
MATCH\u PARENT
WRAP\u CONTENT
常量。它们如下所示:

如果您想让
TextView
占据屏幕的剩余宽度,我会将权重保留为1,宽度保留为0,但您需要将高度设置为常量,如
WRAP\u CONTENT

您还将
图像视图的大小设置为设备屏幕密度(这是一个常数),而不是根据屏幕密度设置缩放大小。

最好用于此类列表。
您只需要编写一个,这表示在列表中创建一行的逻辑。

我建议使用
游标适配器和布局xml文件,这样您就可以将其设计成您想要的样子,并预览它。这比设置所有那些精细的
布局参数要容易得多


如果您必须动态创建它们,您可能会发现文本颜色与背景颜色相同,请尝试将其设置为亮红色等可见颜色进行测试。如果您仍然看不到文本,则可能是其可见性未设置为查看。可见
最后,布局可能大小不正确,为此提供了一个方便的提示背景颜色适当醒目,即使没有文本,也应该看到阴影块。

旋转屏幕确实会正确更新布局?如果图像和文本视图是在同一个功能中创建的,但只显示一个,则没有意义。我添加了一些关于布局参数的内容。谢谢,我从未意识到我设置了它是0px。我想要的图像大小恰好是屏幕密度的值。在多个设备上进行了测试。如果我想让文本视图占用图像留下的剩余空间,我该怎么办?它们是否恰好都是相同的屏幕密度?如果你的设备是MDPI而不是HDPI或XHDPI呢?1个MDPI和另一个xhdpiEdit我的答案是如何填充屏幕宽度的剩余空间。你只需设置文本视图的高度即可包装内容。
LinearLayout.LayoutParams vp2  = new LinearLayout.LayoutParams(0,0,1f);
tv.setLayoutParams(vp2);