4

在我的 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 值留空。

4

4 回答 4

7

您正在寻找getIdentifier()方法:

for (int i = 1; i < 6; i++){
     views.setTextViewText(getResources().getIdentifier("textView" + i, "id", getPackageName()), "" + realtimeData.get(i).id);
}
于 2012-11-11T15:52:19.297 回答
2

+1 给 Luksprog ,但是我觉得“i<6”不是正确的方法,而是使用ViewGroup.getChildCount() and ViewGroup.getChildAt(int)这样你就可以更好地控制你的文本视图数量。

于 2012-11-11T15:55:36.990 回答
0

更少的问题

使用getIdentifier()让我很伤心,所以我得到了以下结果:

String idName = "companyName";   // The id name of your resource.

int resourceId = R.id.class.getField(idName).getInt(null);
于 2013-12-12T02:34:09.517 回答
-1

如果您对 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;
于 2012-11-11T15:52:52.050 回答