Разве невозможно добавить несколько представлений в ScrollView? - PullRequest
3 голосов
/ 12 марта 2012

Если это так, то кажется, что либо ScrollView довольно слабый (сомнительный), либо есть какой-то другой способ сделать это. Вот мой код Где это бомбы (то есть во второй раз за цикл), прокомментировано.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ondemandandautomatic_dynamicauthorize);

    ScrollView svh = (ScrollView) findViewById(R.id.scrollViewHost);

    // Contacts data snippet adapted from
    // http://saigeethamn.blogspot.com/2011/05/contacts-api-20-and-above-android.html
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            // Create a Linear Layout for each contact?
            LinearLayout llay = new LinearLayout(this);
            llay.setOrientation(LinearLayout.HORIZONTAL);

            LinearLayout.LayoutParams llp = new LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            llp.weight = 1.0f;

            CheckBox cbOnDemand = new CheckBox(getApplicationContext());
            cbOnDemand.setTag(id);
            cbOnDemand.setLayoutParams(llp);
            llay.addView(cbOnDemand);

            CheckBox cbTime = new CheckBox(getApplicationContext());
            cbOnDemand.setTag(id);
            cbTime.setLayoutParams(llp);
            llay.addView(cbTime);

            CheckBox cbSpace = new CheckBox(getApplicationContext());
            cbOnDemand.setTag(id);
            cbSpace.setLayoutParams(llp);
            llay.addView(cbSpace);

            TextView tv = new TextView(getApplicationContext());
            tv.setTag(id);
            tv.setText(name);
            tv.setLayoutParams(llp);
            llay.addView(tv);

            svh.addView(llay); // it transports me to Eclipse's Debug perspective when I hit this line the SECOND time around.
            // One cat on stackOverflow said to do this, another said it
            // would be unnecessary
            svh.invalidate();
        }
    }
}

Ответы [ 3 ]

9 голосов
/ 12 марта 2012

Есть две вещи, которые вы можете сделать, чтобы решить эту проблему.

1) Сделайте единственным ребенком ScrollView вертикаль LinearLayout и добавьте всех своих детей в LinearLayout вместоScrollView.

2) Предпочтительной альтернативой будет использование ListView (которое, вероятно, реализуется с использованием LinearLayout внутри ScrollView).

6 голосов
/ 12 марта 2012

В ScrollView может быть включен только один вид.Однако это представление может быть макетом, например, LinearLayout.Обычно я добавляю такой вид к ScrollView, и он прекрасно работает.

Пример:

<ScrollView>
  <LinearLayout>
    <ImageView/>
    <TextView/>
  </LinearLayout>
</ScrollView>
1 голос
/ 12 марта 2018

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

 <android.support.v4.widget.NestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <include layout="@layout/descriptioncontent_layout" />

</android.support.v4.widget.NestedScrollView>

добавление нескольких элементов в описание content_layout ... и т. д.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    card_view:cardCornerRadius="5dp">

    <include layout="@layout/descption_layout" />
</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    card_view:cardCornerRadius="5dp">

    <include layout="@layout/howtodoit" />
</android.support.v7.widget.CardView>

Description_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Full Body:"
    android:id="@+id/description"
    android:textSize="20sp"
    android:textColor="@color/how"
    android:padding="10dp"
    android:layout_marginLeft="10dp"
    android:layout_gravity="center|left" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="If you are brand new to yoga, there are certain postures that are essential for you to learn so you can feel comfortable in a class or practicing on your own at home"
    android:id="@+id/detaildescription"
    android:textSize="18sp"
    android:padding="10dp"
    android:layout_gravity="center_horizontal" />

...