带有变量的Android TextView id?
Posted
技术标签:
【中文标题】带有变量的Android TextView id?【英文标题】:Android TextView id with a variable? 【发布时间】:2012-10-31 05:27:34 【问题描述】:在我的 android 应用程序中,有没有办法通过使用变量作为 id 的一部分将文本设置为 textview?
我正在尝试做这样的事情:
for (int i = 1; i < 6; i++)
views.setTextViewText(R.id.textView+i, "" + realtimeData.get(i).id);
我确实在布局 xml 中将 TextViews 声明为 textView1、textView2 等...并且可以使用静态名称访问它们。我的问题是我不知道我的列表中有多少对象。我不想显示超过 5 个,但如果少于 5 个,则 TextView 值可以留空。
【问题讨论】:
不,你不能这样做 :) R.id 是编译时生成的。 我知道这不可能。我希望有人能指出我的替代方向。 【参考方案1】:您正在寻找getIdentifier()
方法:
for (int i = 1; i < 6; i++)
views.setTextViewText(getResources().getIdentifier("textView" + i, "id", getPackageName()), "" + realtimeData.get(i).id);
【讨论】:
【参考方案2】:+1 到 Luksprog ,但是我觉得“iViewGroup.getChildCount() and ViewGroup.getChildAt(int) 以便您可以更好地控制文本视图的数量。
【讨论】:
【参考方案3】:更少的问题
使用getIdentifier()
让我很伤心,所以我得到了以下结果:
String idName = "companyName"; // The id name of your resource.
int resourceId = R.id.class.getField(idName).getInt(null);
【讨论】:
【参考方案4】:如果您对 R 文件保持大腿控制以确保您的 ID 是连续的,您可以尝试以下操作:
for (int i = R.id.firstTextView; i <= R.id.lastTextView; i++)
views.setTextViewText(i, "" + realtimeData.get(i).id);
这将允许只将 ID 添加到 R 文件中,而无需修改代码来更改硬编码的 6
数字。
只是为了证明我的观点:
<TextView android:id="@+id/testStart" />
<TextView android:id="@+id/test2" />
<TextView android:id="@+id/test3" />
<TextView android:id="@+id/testEnd" />
<Button android:id="@+id/button1" />
生成:
public static final int button1=0x7f070004;
public static final int menu_settings=0x7f070005;
public static final int test2=0x7f070001;
public static final int test3=0x7f070002;
public static final int testEnd=0x7f070003;
public static final int testStart=0x7f070000;
稍后添加:
<TextView android:id="@+id/test4" />
就在
之前 <TextView android:id="@+id/testEnd" />
立即将 R.java 更改为:
public static final int button1=0x7f070005;
public static final int menu_settings=0x7f070006;
public static final int test2=0x7f070001;
public static final int test3=0x7f070002;
public static final int test4=0x7f070003;
public static final int testEnd=0x7f070004;
public static final int testStart=0x7f070000;
【讨论】:
您无法控制 ID。它们是由 ADT 在编译时生成的,您无法预测或保证它们。 使用@+id 时有效,ID 以连续顺序重新编译。但是,我必须说设计会很脆弱。以上是关于带有变量的Android TextView id?的主要内容,如果未能解决你的问题,请参考以下文章
android textview 显示带图片和超链接的html,且图片带有超链接可点击跳转