Как автоматически создать флажок при вводе пользователем - PullRequest
2 голосов
/ 02 августа 2020

В «Моем действии» у меня есть текст и кнопка редактирования. Когда пользователь нажимает кнопку «Добавить», контрольный список нужно создать автоматически с именем пользователя, введенным в текст редактирования.

как создать флажок в программе java на основе пользовательского ввода

image

вот мой java код

public class MainActivity extends AppCompatActivity {

EditText uinput;
Button btnadd;
CheckBox cbname;
ScrollView sv;
RelativeLayout ll;

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


    sv = new ScrollView(this);
    ll = new RelativeLayout(this);
   // ll.setOrientation(LinearLayout.VERTICAL);
    sv.addView(ll);

    uinput = findViewById(R.id.ed_name);
    btnadd = findViewById(R.id.btn_add);
    btnadd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String Name = uinput.getText().toString();
            CheckBox cb = new CheckBox(getApplicationContext());
            cb.setText(Name);
            ll.addView(cb);

        }
    });
}

Ответы [ 3 ]

2 голосов
/ 02 августа 2020

Вы не добавили ScrollView в свой макет, поэтому R.layout.activity_main ничего не знает о ваших добавленных представлениях.

Итак, увеличьте root ViewGroup вашего макета, добавьте ScrollView и установите ограничения / атрибуты в соответствии с типом вашего root ViewGroup.

Добавьте идентификатор в root макет

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:id="@+id/root"
    tools:context=".MainActivity">

Замените ScrollView внутренний RelativeLayout с LinearLayout и добавьте ScrollView с параметром атрибута RelativeLayout.BELOW, чтобы он находился внизу btn_add

ScrollView sv = new ScrollView(this);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
// ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);

EditText uinput = findViewById(R.id.ed_name);
Button btnadd = findViewById(R.id.btn_add);

RelativeLayout rootLayout = findViewById(R.id.root);

// Set constraints/attributes to the sv
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, btnadd.getId());
rootLayout.addView(sv, params);

btnadd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        String Name = uinput.getText().toString();
        CheckBox cb = new CheckBox(getApplicationContext());
        cb.setText(Name);
        ll.addView(cb);

    }
});
2 голосов
/ 02 августа 2020

Я предлагаю вам добавить все, что есть c в файл макета activity_main.xml как:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity2">

    <EditText
        android:id="@+id/ed_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:hint="Enter name to add in the list"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Add"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ed_name" />

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="409dp"
        android:layout_height="612dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_add">

        <LinearLayout
            android:id="@+id/linear_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
    </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

Теперь Checkbox - это тот, который мы будем генерировать программно и добавлять их в LinearLayout, который является единственным дочерним элементом ScrollView (поддерживает только одного дочернего элемента). Пример кода для MainActivity этого здесь:

    public class MainActivity extends AppCompatActivity {

    // declare the required views variable
    private EditText uInput;
    private LinearLayout linearLayout;

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

        // initializes required view variable
        uInput = findViewById(R.id.ed_name);

        linearLayout = findViewById(R.id.linear_layout);

        Button btnAdd = findViewById(R.id.btn_add);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = uInput.getText().toString();
                if (!name.isEmpty()) {
                    CheckBox checkBox = new CheckBox(MainActivity.this);
                    checkBox.setText(name);
                    linearLayout.addView(checkBox);
                } else
                    Toast.makeText(MainActivity.this, "The name cannot be empty!", Toast.LENGTH_LONG).show();
            }
        });

    }
}

Рабочий пример изображения

Он также проверяет, является ли текст в EditText пустым, и, если он, генерирует подходящее сообщение Toast, не позволяющее пользователю создавать пустое Checkbox. Надеюсь, это поможет!

1 голос
/ 02 августа 2020

Этот код добавит флажок в вашем представлении

, поскольку у вас нет предоставленного кода, я не дам вам идею придумать свои собственные стратегии или стиль

ScrollView sv = new ScrollView(this);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);

Button b = new Button(this);

b.setOnClickListener(new OnClickListener() {
    @Override
     public void onClick(View v) {
    
        CheckBox cb = new CheckBox(getApplicationContext());
        cb.setText(myTextBoxText.getText());
        ll.addView(cb);
    
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...