2016-07-15 14 views
2

我想改变textViews'文本内部的循环Android Studio中,这样的事情:TextViews文本更改为循环

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

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

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

是否有可能这样做?我不知道如何根据“我”值更改循环内的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" /> 
+0

可以设置TextView的对象数组 –

+0

是的,这是相当可能的。您可以循环到TextView父级的子视图中。请显示您的XML,以便我们可以看到这是否是这种情况。 –

+0

结帐我的解决方案@Tymek T. –

回答

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

非常感谢! –

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

好了,如果你把所有的textviews在同一层级,你目前在你的XML,你可以试试这个解决方案:

包裹了整个事情了在一个父布局,说RelativeLayout的。然后,循环遍历它:

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

还有一个更好的方法来读取布局,绘制和ID 资源ID在android系统

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