Java 对话框和编辑文本侦听器:在setEnabled时崩溃
你好,我要发疯了,想知道这个对话中的问题在哪里。我正在尝试在Java 对话框和编辑文本侦听器:在setEnabled时崩溃,java,android,xml,button,android-edittext,Java,Android,Xml,Button,Android Edittext,你好,我要发疯了,想知道这个对话中的问题在哪里。我正在尝试在edittext中创建一个对话框。。如果edittext为空,则必须禁用肯定的按钮。我写了这段代码 public class Example extends AlertDialog { AlertDialog.Builder builder; EditText mEditText; Context mContext; Button button; String text; protec
edittext
中创建一个对话框。。如果edittext
为空,则必须禁用肯定的按钮
。我写了这段代码
public class Example extends AlertDialog {
AlertDialog.Builder builder;
EditText mEditText;
Context mContext;
Button button;
String text;
protected Example(Context context) {
super(context);
// TODO Auto-generated constructor stub
builder = new AlertDialog.Builder(context);
this.mContext = context;
mEditText = new EditText(mContext);
builder.setView(mEditText);
builder.setPositiveButton("Okay", null);
builder.setNegativeButton("No", null);
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
AlertDialog dialog = builder.create();
text = mEditText.getText().toString();
if(text.trim().length()>0) {
button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
if(button != null)
button.setEnabled(true);
else
button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setEnabled(false);
}
else
button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setEnabled(false);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
builder.setTitle("Example Dialog");
builder.create();
builder.show();
}
}
当我执行此代码并在
edittext
中写入内容时,我在if at this line按钮的else中得到NullPointerException
。setEnabled(false)代码>问题出在哪里?错误显然在这一行:-
mEditText = new EditText(mContext);
通过这样做,您已经为Edittext创建了一个新对象。我们在创建动态edittext或任何其他小部件时都会这样做
在正常情况下,您需要传递对edittext的引用,该引用必须在edittext的xml文件中名为“id”的属性中给定,例如:-
<EditText
android:id = "@+id/editText1"
<!-- other properties-->
</EditText
问题出现在text=mEditText.getText().toString()代码>
当文本为null
null.toString()时代码>将崩溃
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s != null)
{
if (s.length() > 0)
{
dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(true);
}
else {
dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
}
}
}
下面是我在项目中使用的全部代码
AlertDialog.Builder builder; // Declare Globally
AlertDialog dialog; // Declare Globally
builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setTitle("Add New Keyword");
final EditText input = new EditText(this);
input.setHint("Min 3 Chars");
builder.setView(input);
input.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s != null)
{
if (s.length() > 2)
{
dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(true);
}
else {
dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
if (input != null)
{
System.out.println("Entered Text" + input.getText().toString().trim());
}
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
}
if和else的范围仅限于下一站。若要使用多条语句,请将其括在块中。比如说-
else
{
button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setEnabled(false);
}
@新年快乐是对的。您在其他部分缺少{}。如果不放置{},那么下一个语句将被视为else部分。按钮.setEnabled(错误)代码>在else块之外。因此,按钮
对象没有在这里初始化。是的,你是对的,但我在同一行中得到了相同的错误,原因相同。@Giovannimarioti看到更新的答案,我有类似的要求。什么?但是你在说什么?编辑文本可以通过友好方式创建。