Как добавить копию существующего LinearLayout под ним при нажатии кнопки? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу создать программу, в которой в какой-то момент пользователь должен будет добавить некоторые школьные предметы в качестве входных данных. Я создал поле ввода (см. Изображение ниже), где при нажатии кнопки «Добавить» под ним будет создано равное поле. Кнопка «Удалить» служит для удаления поля ввода, но должно быть хотя бы одно поле ввода.

Later

Поскольку я новичок в разработке для Android, я хотел бы знать, как это сделать. Я уже исследовал некоторые веб-сайты, но смог создать только отдельные элементы, такие как TextViews, используя addView:

val relLay = findViewById<RelativeLayout>(R.id.relLay1)
val btnAdd = findViewById<Button>(R.id.btnAdd)
btnAdd.setOnClickListener{
    val tv = TextView(this)
    tv.text = "This is a text view"
    val params : RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT)
    params.setMargins(10, pos, 10, 10)
    pos += 50     // pos is a variable that was declared previously
    rellay.addView(tv)
}

Как мне сгенерировать эти элементы в группе? И кроме того, после создания других таких полей, когда пользователь нажимает «Готово», как мне прочитать данные всех созданных полей?

Мой input_activity.xml файл:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/relLay1"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

        <RelativeLayout
                android:id="@+id/relLay2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">

            ...

            <!-- Title of the input field -->
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Add subject"
                    android:layout_below="@id/table1"
                    android:layout_marginTop="15dp"
                    android:layout_centerHorizontal="true"
                    android:textSize="36sp"
                    android:id="@+id/txtSubtitle2"/>

            <!-- LinearLayout that I want to be created
            every time the user clickes the button Add -->
            <LinearLayout
                    android:orientation="vertical"
                    android:id="@+id/linLay1"
                    android:layout_below="@id/txtSubtitle2"
                    android:layout_marginTop="15dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                <EditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="textPersonName"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:ems="10"
                        android:id="@+id/edtSubjectNam"
                        android:hint="Subject name"/>
                <TextView
                        android:text="Days of the week"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textSize="18sp"
                        android:id="@+id/string3"/>
                <CheckBox
                        android:text="Sunday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkSun"/>
                <CheckBox
                        android:text="Monday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkMon"/>
                <CheckBox
                        android:text="Tuesday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkTue"/>
                <CheckBox
                        android:text="Wednesday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkWed"/>
                <CheckBox
                        android:text="Thursday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkThu"/>
                <CheckBox
                        android:text="Friday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkFri"/>
                <CheckBox
                        android:text="Saturday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkSat"/>

                <!-- LinearLayout of the buttons Done, Remove and Add -->
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">
                    <Button
                            android:text="Done"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"  
                            android:id="@+id/btnDone"
                            android:layout_weight="1"/>
                    <Button
                            android:text="Add"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" 
                            android:id="@+id/btnAdd"
                            android:layout_weight="1"/>
                    <Button
                            android:text="Remove"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" 
                            android:id="@+id/btnRem"
                            android:layout_weight="1"/>
                </LinearLayout>


            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

Мой код в Котлине (InputActivity.kt) все еще пуст, потому что я не мог сделать очень много. Любая помощь очень, очень приветствуется. Я также хотел бы получить некоторую помощь от того, как будет выглядеть код кнопки «Удалить», но меня больше всего беспокоит кнопка «Добавить».

1 Ответ

1 голос
/ 20 апреля 2019

Итак, вам нужно создать собственный файл макета только с этим видом.Затем вы надули бы представление и добавили бы его в родительское представление

 public View appendView(Activity activity) {
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.NAME_OF_YOUR_LAYOUT_FILE, null);
    LinearLayout parentLayout = activity.findViewById(R.id.YOUR_CONTAINER);
    parentLayout.addView(view);
}

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

Чтобы прочитать данные, просто выполните view.findViewById (R.id.FIELD), затем получите из него соответствующее значение и сохраните его.Может быть, хочу сделать класс для него

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