Программно добавлять виды внутри (линейного) макета (то есть внутри ScrollView) - PullRequest
4 голосов
/ 28 марта 2012

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

Один из подходов заключается в использовании ListView и пользовательского ArrayAdapter, но мне нужно было бы поместить ListView в ScrollView, и это является проблемой, даже если я вручную переопределяю высоту ListView. Показывает один элемент списка и одну часть следующего.

Другой подход состоит в том, чтобы определить LinearLayout в качестве держателя комментариев, а не раздувать другой LinearLayout, определенный в его собственном XML-файле, заполнить его содержимое, прикрепить к представлению держателя. С точки зрения программы, он работает нормально, за исключением того, что помещает комментарии ниже содержания новостей. Это похоже на создание прокручиваемого представления комментариев под содержимым новостей (содержимое перекрывает его).

Есть ли другой способ сделать это, который не имеет ничего общего со списками, или как я могу использовать другой подход к работе.

Соответствующий фрагмент кода из макета xml, содержащий содержание новостей:

<LinearLayout> //global layout
    <LinearLayout>
        //views that hold title, date, content
    </LinearLayout>      

        <LinearLayout 
           android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/commentsHolder"
            android:orientation="vertical">

        <View 
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:background="#ed1b24"/>
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text="KOMENTARI"
            android:layout_marginLeft="5dp"/>
        <View 
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="#ed1b24"/>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:orientation="vertical"
            android:id="@+id/comments_holder_view"
            android:layout_weight="1">
        </LinearLayout>


    </LinearLayout>

</LinearLayout>

и код, соответствующий одному комментарию:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/comments_holder_item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">

<TextView 
    android:id="@+id/comment_content"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/comments_back_details"
    android:text="Ovde ide tekst komentara, koji se, naravno, dinamicki dodaje."/>

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

    <TextView 
        android:id="@+id/comment_author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/categoryStyle"
        />

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" | "
        style="@style/categoryStyle"
        />

    <TextView 
        android:id="@+id/comment_pubdate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/categoryStyle"/>

</LinearLayout>

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:orientation="horizontal"
    android:layout_margin="5dp"
    android:background="#d1d1d1">
</LinearLayout>

Большое спасибо за любой ответ. Это очень важно для меня.

1 Ответ

2 голосов
/ 28 марта 2012

Я не очень уверен, как вы раздуете свой comments, но вот как я бы это сделал.

Объявите комментарии Layout как LinearLayout и дайте ему идентификатор, а затем получите ссылку на это LinearLayout:

LinearLayout commentsLayout=(LinearLayout)findViewById(R.id.commentsLayoutId);

, а затем просто добавьте дочерний элемент Views к этому макету:

commentsLayout.addView(newComment);
...