所以我有一个XML layout1,它只是一个带有三个文本视图的LinearLayout。我还有另一个带有ScrollView的XML layout2和一个LinearLayout。我正在使用这个for循环来创建ScrollView的LinearLayout中的几个layout2。它工作正常,但我希望能够在for循环中设置每个TextView的文本。我不确定如何访问这些TextView,因为我只能在XML文件中设置一个id,如果我试图在for循环中访问它们的id,这不会导致问题吗?
private void setUpResults() {
for (int i = 1; i < totalQuestions; i++) {
parent.addView(LayoutInflater.from(getBaseContext()).inflate(
R.layout.result_block, null));
}
}
这是result_block xml文件(layout1):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/layoutSelectedAnswer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:orientation="horizontal"
android:paddingBottom="@dimen/option_padding_bottom"
android:paddingTop="@dimen/option_padding_top" >
<TextView
android:id="@+id/tvOptionALabel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/option_a"
android:textColor="@color/white"
android:textSize="@dimen/option_text_size" />
<TextView
android:id="@+id/tvSelectedAnswer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/option"
android:textColor="@color/white"
android:textSize="@dimen/option_text_size" />
</LinearLayout>
<LinearLayout
android:id="@+id/layoutCorrectAnswer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:orientation="horizontal"
android:paddingBottom="@dimen/option_padding_bottom"
android:paddingTop="@dimen/option_padding_top" >
<TextView
android:id="@+id/tvOptionBLabel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/option_b"
android:textColor="@color/white"
android:textSize="@dimen/option_text_size" />
<TextView
android:id="@+id/tvCorrectAnswer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/option"
android:textColor="@color/white"
android:textSize="@dimen/option_text_size" />
</LinearLayout>
</LinearLayout>
假设我想在每个循环中将带有id为tvCorrectAnswer的TextView设置为不同的String值,我该如何访问它?
答案 0 :(得分:3)
当然,你可以这样做:
private void setUpResults () {
LayoutInflater i = LayoutInflater.from(getBaseContext());
for (int i = 1 /* should be zero? */; i < totalQuestions; i++) {
View view = i.inflate(R.layout.result_block, parent, false);
TextView correctAnswer = (TextView) view.findViewById(R.id.tvSelectedAnswer);
correctAnswer.setText("My Answer Text");
parent.addView(view);
}
}
关键是,使用父级作为容器进行扩充,但不要附加它(false参数)。然后,您将获得对膨胀视图的引用,然后您可以直接引用它来执行findViewById()调用(这将限制搜索到特定的ViewGroup)。然后将其添加到父项并继续下一项。
答案 1 :(得分:0)
在ViewGroup中添加了所有视图后,您可以使用ViewGroup.getChildAt(int)
获取已插入的视图之一。获得其中一个视图后,您可以访问其任何内部视图。这样的事情。
for(int i = 0; i < parentView.getChildCount();++i) {
View v = parentView.getChildAt(i);
Textview tv = (TextView) v.findViewById(R.id.tvOptionALabel2);
//And so on...
}