java - 更改 AlertDialog 中按钮的文本

标签 java android android-alertdialog

我需要根据输入的文本将 AlertBox 的肯定按钮文本从无更改为“确定”或“添加”。我有以下用于 AlertBox 创建和显示的代码:

public void show() {
    View inputView = LinearLayout.inflate(mContext, R.layout.goal_tag_input, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    builder.setView(inputView);
    mInput = inputView.findViewById(R.id.goal_tag_input);
    mInput.addTextChangedListener(mTagNameTextWatcher);
    List<Tag> availableTags = AppDatabase.getInstance(mContext).tagDao().getAll();
    mAvailableTagLabels = new ArrayList<>();
    for (Tag tag : availableTags) {
        mAvailableTagLabels.add(tag.getName());
    }
    ArrayAdapter<String> inputAdapter = new ArrayAdapter<>(mContext, 
    android.R.layout.select_dialog_item, mAvailableTagLabels);
    mInput.setAdapter(inputAdapter);
    builder.setCancelable(true);
    builder.setPositiveButton("", mAddTagClickListener);
    builder.setNegativeButton(R.string.Cancel, null);
    mDialog = builder.create();
    mDialog.show();
}

我还有一个 TextWatcher 实现:

private TextWatcher mTagNameTextWatcher = new TextWatcher() {
    @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) {
        String tagName = mInput.getText().toString();
        if (tagName.trim() != "") {
            Button buttonPositive = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
            if (mAvailableTagLabels.contains(tagName)) {
                buttonPositive.setText(R.string.OK);
            } else {
                buttonPositive.setText(R.string.Add);
            }
        }
    }
};

在调试过程中,我观察到 buttonPositive 的文本值已适当更改,但没有反射(reflect)在界面中。你知道为什么会这样吗?我检查了this answer但这没有帮助。

最佳答案

嗯,问题似乎出在使用 AlertDialog 构建器设置肯定按钮时:builder.setPositiveButton("", mAddTagClickListener);。显然,如果您传递空字符串作为第一个参数,则不会创建按钮。当我尝试将其更改为(至少)一个空格字符串时,一切都开始按预期工作。
后来我更改了启用/禁用按钮的方法。

关于java - 更改 AlertDialog 中按钮的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624262/

相关文章:

java - 更改 AlertDialog 按钮对齐方式

android - 如何在 Android 中设置 Alert Dialog 的高度和宽度?

java - 即使使用 MathContext 也会出现非终止十进制错误

android - 无法在 android studio 的设置菜单中找到 Android SDK

java - Spring Boot 类 Size 未找到 @Size(min=1,max=18)

java - 作为动画持续时间提供的长值 - AndEngine

android - NDK r16b 独立工具链错误 : "/usr/bin/ld: this linker was not configured to use sysroots"

android - 单击后 Alertdialog 保持 Activity 状态

java - Travis CI 和 JUnit with Gradle 找不到类路径资源

java - 为什么上传到 S3 的文件的内容类型为 application/octet-stream,除非我将文件命名为 .html?