Android TextView id带有变量吗?

时间:2012-11-11 15:46:30

标签: java android android-widget textview

在我的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 个答案:

答案 0 :(得分:5)

您正在寻找getIdentifier()方法:

for (int i = 1; i < 6; i++){
     views.setTextViewText(getResources().getIdentifier("textView" + i, "id", getPackageName()), "" + realtimeData.get(i).id);
}

答案 1 :(得分:2)

+1给Luksprog,不过我认为“i&lt; 6”不是正确的方法,而是使用ViewGroup.getChildCount() and ViewGroup.getChildAt(int),这样您就可以更好地控制文本视图的数量。

答案 2 :(得分:0)

减少问题

使用getIdentifier()让我感到悲伤,所以我最终得到了以下内容:

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

int resourceId = R.id.class.getField(idName).getInt(null);

答案 3 :(得分:-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;