【问题标题】:TextViews text change in a for loopTextViews 文本在 for 循环中更改
【发布时间】:2016-07-15 09:39:21
【问题描述】:

我想在 Android Studio 的 for 循环中更改 textViews 的文本,如下所示:

for i=0 ------------> textView0 设置文本“默认”

for i=1 ------------> textView1 设置文本“默认”

for i=2 ------------> textView2 设置文本“默认”

有可能做到吗?我不知道如何根据“i”值更改循环内的textView id,有人可以帮助我吗?

这是我的 XML:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="--------------"
    android:id="@+id/textView0"
    android:layout_marginLeft="16dp"
    android:layout_gravity="center_horizontal"
    android:textSize="13dp" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="--------------"
    android:id="@+id/textView1"
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="16dp"
    android:textSize="13dp" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="--------------"
    android:id="@+id/textView2"
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="16dp"
    android:textSize="13dp" />

【问题讨论】:

  • 可以设置TextView对象数组
  • 是的,这很有可能。您可以循环进入 TextView 父级的子视图。请显示您的 xml,以便我们看看是否是这种情况。
  • 检查我的解决方案@Tymek T.
  • 在我的问题中添加了 XML,@SathishKumarJ 没关系,但将来我会有更多的 textViews,所以我想自动执行此操作
  • 试试Sohail Zahid的回答

标签: java android for-loop textview


【解决方案1】:

性能明智的好方法。

    int[] textViews = {R.id.textView1, R.id.textView2, R.id.textView3};
    String[] messages = {"one", "two", "three"};

     for (int i = 0; i < 3; i++) {
            TextView tv = (TextView) findViewById(textViews[i]);
            tv.setText(messages[i]);
        }

【讨论】:

    【解决方案2】:

    你也可以有一个标签集合来获取标签表单。

    List<String> labels = new ArrayList<>();
    labels.add("Default 1");
    labels.add("Default 2");
    labels.add("Default 3");
    
    int[] textViewIds = new int[3];
    textViewIds[0] = R.id.text_view_a;
    textViewIds[1] = R.id.text_view_b;
    textViewIds[2] = R.id.text_view_c;
    
    for (int i = 0; i < textViewIds.length; i++) {
        TextView tv = (TextView) findViewById(textViewIds[i]);
        tv.setText(labels.get(i));
    }
    

    【讨论】:

      【解决方案3】:

      好吧,如果您的所有文本视图与您当前在 xml 中的层次结构级别相同,您可以尝试以下解决方案:

      将整个内容封装在一个父布局中,比如一个 RelativeLayout。然后,循环遍历它:

      int numberOfTextViews = layout.getChildCount();
      for(int i = 0; i < numberOfTextViews; i++) {
          ((TextView)(afterSendingMail.getChildAt(i))).setText("Default");
      } 
      

      【讨论】:

        【解决方案4】:

        还有另一种更好的方法来读取 android 中的 layout、drawable 和 id resource ID

            String[] messages = {"one", "two", "three"};
        
            for (int i = 0; i < 3; i++) {
                TextView tv = (TextView) findViewById(getResources().getIdentifier("textView" + i+1, "id", getPackageName()));
                tv.setText(messages[i]);
            }
        

        它将在运行时读取id。可能你有100 ids 那么就没有必要将这些id's 保存在一个数组中。

        注意

        并在 Fragment 内使用 getActivity()getResources()getPackageName()。 详情请看thisthis

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-01
          • 1970-01-01
          • 2020-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          相关资源
          最近更新 更多