2013-06-26 2 views
0

Итак, у меня есть XML layout1, который представляет собой только LinearLayout с тремя текстовыми представлениями. У меня также есть другой XML-макет2 с ScrollView и LinearLayout внутри него. Я использую этот цикл for для создания нескольких макетов2 внутри LinearLayout ScrollView. Он работает нормально, но я хочу, чтобы можно было установить текст каждого из TextViews в цикле for. Я не уверен, как получить доступ к этим TextViews, поскольку я могу установить только один идентификатор в XML-файле, не вызовет ли проблем, если я попытаюсь получить доступ к их идентификатору внутри цикла for?Android: установка текста в каждом новом представлении в цикле for

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> 

Скажем, я хотел установить TextView с идентификатором, как tvCorrectAnswer к другому строкового значения в каждом цикле, как я должен получить доступ к Это?

ответ

2

Конечно, вы можете сделать это следующим образом:

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

Ключ, надуть с помощью родителю как контейнер, но не придает его (ложный параметр). Затем вы получите ссылку на завышенное представление, которое затем можно напрямую ссылаться на вызовы 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... 
}