Как автоматически добавлять EditText в RecyclerView?

Описание:

Я хочу добавлять новый элемент EditText в RecyclerView, когда пользователь что-то ввёл в уже существующем EditText. Но уже со старта приложения создается 4 элемента EditText, после того, как что-то вводишь в один из них, добавляется еще несколько элементов.

Как я это делал:

В onCreate я создаю список из строк и добавляю к нему строку ""(пустую), передаю этот список адаптеру. В адаптере я создал TextWatcher, в afterTextChanged я проверяю, пустой ли последний элемент списка, если нет, то я добавляю ""(пустую строку).

Так выглядит приложение после запуска(сразу появляются 4 editText): введите сюда описание изображения

Код активити:

public class AddElement extends AppCompatActivity {

ArrayList<String> subtasks;
SubtasksAdapter adapter;
RecyclerView recyclerView;

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

    subtasks = new ArrayList<>();
    subtasks.add("");

    recyclerView = findViewById(R.id.recyclerView);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    adapter = new SubtasksAdapter(subtasks);
    recyclerView.setAdapter(adapter);

}

Код адаптера:

public class SubtasksAdapter extends RecyclerView.Adapter<SubtasksAdapter.SubtasksViewHolder> {

ArrayList<String> elements;

public SubtasksAdapter(ArrayList<String> elements) {
    this.elements = elements;
}

@NonNull
@Override
public SubtasksViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    Context context = parent.getContext();
    int LayoutIdForListItem = R.layout.example_of_item3;
    LayoutInflater layoutInflater = LayoutInflater.from(context);

    View view = layoutInflater.inflate(LayoutIdForListItem, parent, false);

    return new SubtasksViewHolder(view, new CustomEditTextListener());
}

@Override
public void onBindViewHolder(@NonNull SubtasksViewHolder holder, int position) {
    holder.bind(position);

}

@Override
public int getItemCount() {
    return elements.size();
}

class SubtasksViewHolder extends RecyclerView.ViewHolder {

    CheckBox checkBox;
    EditText editText;
    CustomEditTextListener customEditTextListener;

    public SubtasksViewHolder(@NonNull View itemView, CustomEditTextListener customEditTextListener) {
        super(itemView);

        this.customEditTextListener = customEditTextListener;

        checkBox = itemView.findViewById(R.id.checkBox);
        editText = itemView.findViewById(R.id.editText);

        editText.addTextChangedListener(customEditTextListener);

    }

    void bind(int position) {

        editText.setHint("Добавьте шаг");

        customEditTextListener.updatePosition(getAdapterPosition());
        editText.setText(elements.get(position));

    }
}

class CustomEditTextListener implements TextWatcher {

    int position;

    public void updatePosition(int position) {
        this.position = position;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {

        elements.set(position, s.toString());
        String tempString2 = "";
        String tempString1 = elements.get(elements.size() - 1);
        if (tempString1 != tempString2) {
            elements.add("");
        }

    }
}

Ответы (0 шт):