TextViews文本在for循环中更改

时间:2016-07-15 09:39:21

标签: java android for-loop textview

我想更改textViews' Android Studio中for循环内的文本,类似于:

表示i = 0 ------------> textView0设置文本"默认"

表示i = 1 ------------> textView1设置文本"默认"

表示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" />

4 个答案:

答案 0 :(得分:5)

表现明智的好方法。

    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]);
        }

答案 1 :(得分:0)

您也可以使用标签集来获取标签表单。

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));
}

答案 2 :(得分:0)

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

将整个事物包裹在一个父布局中,比如说一个RelativeLayout。然后,循环遍历它:

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

答案 3 :(得分:0)

  

在android中有另一种更好的方法来读取布局,drawable和id 资源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

注意

片段中使用 getActivity()getResources()getPackageName()。 有关详细信息,请查看thisthis