0

所以我有一个 XML layout1,它只是一个带有三个文本视图的 LinearLayout。我还有另一个带有 ScrollView 和 LinearLayout 的 XML layout2。我正在使用这个 for 循环在 ScrollView 的 LinearLayout 中创建几个 layout2。它工作正常,但我希望能够在 for 循环中设置每个 TextViews 的文本。我不确定如何访问这些 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 值,我应该如何访问它?

4

2 回答 2

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

关键是,使用 parent 作为容器进行膨胀,但不要附加它(false 参数)。然后您将获得对膨胀视图的引用,然后您可以直接引用它来执行您的 findViewById() 调用(这会将搜索限制到该特定 ViewGroup)。然后将其添加到父项并继续下一项。

于 2013-06-26T17:16:43.370 回答
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...
}
于 2013-06-26T17:15:54.490 回答