Кнопка onClick не срабатывает после динамического добавления видов - PullRequest
1 голос
/ 11 ноября 2019

В моей активности есть EditText, и каждый раз, когда пользователь нажимает кнопку ввода на клавиатуре, используя OnEditorActionListener, еще один EditText будет добавлен в LinearLayout.
Проблема заключается в том, что после добавления этих представлений кнопка onClick не 'т работа. Почему это происходит и как это исправить?

кнопка onClick:

btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(NewExpenseActivity.this, "Saved", Toast.LENGTH_SHORT).show();
            }

        });  

.

private TextView.OnEditorActionListener editorActionListener = new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            createNewEditText();
        }

        return false;
    }
};  

.

public void createNewEditText() {
        textInputLayout = new TextInputLayout(this);
        textInputLayout.setPadding(padding_in_px_16, padding_in_px_8, padding_in_px_16, padding_in_px_8);
        editText = new EditText(NewExpenseActivity.this);
        editText.setId(id);
        editText.setHint("Enter Name");
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        editText.setOnEditorActionListener(editorActionListener);
        editText.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        textInputLayout.addView(editText);
        ITEM_MAP.put("Key" + idNum, id);
        idNum++;
        linearEtList.addView(textInputLayout);
    }

1 Ответ

1 голос
/ 11 ноября 2019

Попробуйте использовать: -

private TextView.OnEditorActionListener editorActionListener = new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
        if (event != null) {
            createNewEditText();
        }

        return false;
    }
}

Из-за: -

actionId int: Идентификатор действия. Это будет либо указанный вами идентификатор, , либо EditorInfo # IME_NULL, если он вызывается из-за нажатия клавиши ввода .

событие Если вызывается клавишей ввода,это событие;в противном случае это значение равно нулю.

onEditorAction

И setImeOptions (EditorInfo.IME_ACTION_NEXT) добавляет / устанавливает для экранной клавиши значение NEXT * 1023Кнопка * (--->|). Только если эта программная кнопка используется, actionId == IME_ACTION_NEXT.

как

введите описание изображения здесь

Если вы хотите оба, тогда вы можетеделать

            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_NEXT || (event != null &&  event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    addEditText();
                }
                return false;
            }
...