首页 > 解决方案 > 活动中的更新模式,Android Studio

问题描述

我正在尝试在活动中制作一个菜单按钮,让用户更新内容。第二次点击后,应该会退出更新模式。

在我的程序中发生的情况是,在关闭更新模式的情况下,单击 diagnosticCodeView 时我仍然听到“声音”(我认为这是因为 onClick 方法仍然被覆盖)。有没有办法摆脱这种声音?

    TextView diagnosticCodeView;
    AlertDialog dialog;
    EditText editText;

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.updateReport:
                if(!isEditing) {
                    Snackbar.make(diagnosticCodeView, "Editing mode on", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();

                    diagnosticCodeView = findViewById(R.id.diagnosticCodeView);
                    dialog = new AlertDialog.Builder(this).create();
                    editText = new EditText(this);

                    dialog.setTitle(" Edit text ");
                    dialog.setView(editText);

                    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Save text", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            diagnosticCodeView.setText(editText.getText());
                        }
                    });

                    diagnosticCodeView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            editText.setText(diagnosticCodeView.getText());
                            dialog.show();
                        }
                    });

                    isEditing = true;
                }
                else {
                    Snackbar.make(diagnosticCodeView, "Editing mode off", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();

                    isEditing = false;
                }
                return true;

    ...

标签: javaandroidandroid-studio

解决方案


将侦听器设置为 null 就足够了:

else {
    Snackbar.make(diagnosticCodeView, "Editing mode off", 
    Snackbar.LENGTH_LONG).setAction("Action", null).show();

    diagnosticCodeView.setOnClickListener(null);
    isEditing = false;
}

推荐阅读