Представления внутри линейного макета не отображаются правильно после их повторной инициализации программно - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть линейный макет draggableBallsContainer, который включает в себя 10 вертикально выровненных шариков, которые можно перетаскивать.После перетаскивания некоторых шариков в другой макет я хочу повторно инициализировать «draggableBallsContainer», нажав на кнопку.

После нажатия на кнопку шарики выровнены неправильно, а некоторые из нихдаже больше не видны внутри "draggableBallsContainer".

здесь xml:

    <LinearLayout
        android:id="@+id/draggableBallsContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:layout_weight="2"
        android:background="@drawable/background_right_layout"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/ball_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:contentDescription=""
            android:src="@mipmap/ball" />

        .
        .
        /* balls removed for readability purposes */
        .
        .

        <ImageView
            android:id="@+id/ball_10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:contentDescription=""
            android:src="@mipmap/ball" />
    </LinearLayout>

OnClick запустит этот код:

    draggableBallsContainer.removeAllViews();
    //int i = 0;
    LinearLayout.LayoutParams ballLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
    ballLayoutParams.gravity = Gravity.CENTER;
    for (ImageView ball : balls) {
        draggableBallsContainer.addView(ball, ballLayoutParams);
    }

Запустив этот код,я ожидаю получить то же самое начальное состояние (10 шаров по вертикали).Тем не менее, только некоторые шары будут отображены и «случайно» выровнены.

Я попытался назвать недействительным в качестве ответов на некоторые предложенные похожие темы, но тщетно.

Буду признателен за вашу помощь и заранее спасибо.

1 Ответ

0 голосов
/ 01 февраля 2019

Я предлагаю вам перейти на RecyclerView для этого вида работы.Это поможет вам расширить свой список в будущем.https://developer.android.com/guide/topics/ui/layout/recyclerview

...