带有变量的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?的主要内容,如果未能解决你的问题,请参考以下文章

如何从小部件上的 TextView 获取默认文本大小?

android textview 显示带图片和超链接的html,且图片带有超链接可点击跳转

Android Widget 中的可滚动 TextView

如何在android studio的textview中显示用户Android Mac地址

Android - 带有动画的可扩展 TextView

Android AppCompatEditText,AppCompatTextView, setText 无ID