Динамическое добавление кнопок для прокрутки - PullRequest
0 голосов
/ 24 июня 2018

Мне нужна помощь с динамическим добавлением кнопок к ScrollView. У меня это работает с LinearLayout, но, очевидно, я могу добавить только столько кнопок, чтобы они больше не появлялись на экране. Мой код ниже с прикрепленным изображением его текущего состояния.

Я пытался изменить каждое вхождение LinearLayout с помощью ScrollView в коде, но когда я его запустил, я получил ошибку, в которой что-то указывалось как ScrollViews can only have 1 direct child.

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

Мой код XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    <LinearLayout
        android:id="@+id/mainLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_below="@id/imageTextView"
        android:layout_centerHorizontal="true">
    </LinearLayout>

</RelativeLayout>

Мой Java-код (где я динамически создаю кнопки):

public class Main5Activity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);

        LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);

        for (int i = 0; i < 6; i++)
        {
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

            for (int j = 0; j < 4; j++)
            {
                final Button btnTag = new Button(this);
                btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
                btnTag.setText("" + (j + 1 + (i * 4)));
                btnTag.setId(j + 1 + (i * 4));
                row.addView(btnTag);
            }
            layout.addView(row);
        }
    }
}

Изображение текущего макета.

image

1 Ответ

0 голосов
/ 24 июня 2018

Да ScrollView может иметь только 1 ребенка, и часто это ViewGroup, как LinearLayout, RelativeLayout и т. Д. Вам нужно обернуть LinearLayout ScrollView, например:

<ScrollView>
    <LinearLayout
    android:id="@+id/mainLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@id/imageTextView"
    android:layout_centerHorizontal="true"/>
</ScrollView>

Или вы можете изменить свой самый верхний RelativeLayout на ScrollView, если у него только один ребенок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...