我需要根据输入的文本将 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/