Добавить различные TextViews в ScrollView - PullRequest
1 голос
/ 14 января 2012

У меня есть активность, которая позволяет получать данные из Интернета и отображать их на экране. Я использую представление прокрутки, потому что это длинный текст, я также хочу другой стиль текста для разных данных, поэтому я использую несколько текстовых представлений с другим стилем и отображаю их на экране «Активность», Моя проблема в том, что представление прокрутки может обрабатывать только одно представление, поэтому, как я могу использовать прокрутку, чтобы показать другой стиль представления текста, я попытался добавить LinearLayout в scrollView и добавить все textViews динамически в коде к этому LinearLayout, но я получение исключения - представление прокрутки может содержать только одного прямого потомка.

Код ниже:

/** this is the function, which called from the onClick method.
wanted data object contains 2 strings title message and the message itself.

When debug the code i can see that there's two String values in each loop.
but i cant add the linearLayout to my scrollView - exception ScrollView can host only one direct child */

    private void showResult(ArrayList<WantedData> result) {
        // TODO Auto-generated method stub
        TextView title;
        TextView data;
        scrollLayout = (LinearLayout) findViewById(R.id.LlScrollView);  
        for (WantedData curr : result) {
            if (curr.getTitle() == null) {
                break;
            }

            title = new TextView(this);
            title.setText(curr.getTitle());

            scrollLayout.addView(title, LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT);
            data = new TextView(this);
            data.setText(curr.getData());   
            scrollLayout.addView(data, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        }
        scroll.addView(scrollLayout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

        //at the onCreate method -  scroll = (ScrollView) findViewById(R.id.SvShowTextFromServer);
    }

XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <include
        android:id="@+id/layout_reffernce"
        layout="@layout/explore" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Enter City" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <EditText
                android:id="@+id/EtCity"
                android:layout_width="210dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.14"
                android:orientation="vertical" >

                <requestFocus />
            </EditText>

            <Button
                android:id="@+id/bSearchCity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Search" />
        </LinearLayout>

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Enter State" />

        <EditText
            android:id="@+id/EtState"
            android:layout_width="253dp"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
    </LinearLayout>

    <ScrollView
        android:id="@+id/SvShowTextFromServer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:id="@+id/LlScrollView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/backround"
            android:orientation="vertical" >
        </LinearLayout>


    </ScrollView>

</LinearLayout>

Ответы [ 2 ]

1 голос
/ 14 января 2012

Проблема заключается в двойном создании контейнера в ScrollView. Вы не должны создавать его в действии, а взять уже определенный из xml:

LinearLayout scrollContainer = (LinearLayout)findViewById(R.id.LlScrollView);
for (...) {
    //create here some text
    scrollLayout.addView(text);
}
0 голосов
/ 14 января 2012

Если вы определили LinearLayout в XML, вам не нужно создавать новый LinearLayout в своем коде, но вы должны извлечь существующий таким образом

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LlScrollView);

В противном случае вынеобходимо удалить LinearLayout в вашем XML и добавить все по коду.

...