首页 > 解决方案 > 动态添加视图后,按钮 onClick 不会触发

问题描述

我的活动中有一个 EditText,每次用户按下键盘上的 Enter 按钮时,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);
    }

标签: androidonclicklistenerbuttonclick

解决方案


尝试使用:-

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 ( --->|) 按钮。仅当使用该软按钮时,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;
            }

推荐阅读