【问题标题】:Android TextView id with a variable?带有变量的Android TextView id?
【发布时间】: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 是编译时生成的。
  • 我知道这不可能。我希望有人能指出我的替代方向。

标签: java android android-widget textview


【解决方案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 以连续顺序重新编译。但是,我必须说设计会很脆弱。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多