第二次单击时 onClick 中的 AlertDialog 崩溃
AlertDialog in onClick crashes on second click
我有下面的代码,它在单击 EditText 字段时禁用了 AlertDialog。这第一次完美运行,但是如果用户关闭对话框然后再次单击该字段,应用程序会崩溃。
roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
.minValue(1)
.maxValue(15)
.defaultValue(1)
.textSize(20)
.enableFocusability(false)
.wrapSelectorWheel(true)
.build();
roomEdit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder(SearchActivity.this)
.setView(roomnumberPicker)
.setTitle("Pick number of Rooms:")
.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
}
}).show();
}
});
哪些错误:
java.lang.IllegalStateException: The specified child already has a
parent. You must call removeView() on the child's parent first.
[编辑] 使 roomnumberPicker 最终化。您将能够访问它。
您的 MaterialNumberPicker 是第一次附加到其父级。因此,第二次开始时,当您尝试再次将其添加到新的 AlertDialog 时,它会向您抛出该异常。
试试这个:
roomEdit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final MaterialNumberPicker roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
.minValue(1)
.maxValue(15)
.defaultValue(1)
.textSize(20)
.enableFocusability(false)
.wrapSelectorWheel(true)
.build();
new AlertDialog.Builder(SearchActivity.this)
.setView(roomnumberPicker)
.setTitle("Pick number of Rooms:")
.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
}
}).show();
}
});
我有下面的代码,它在单击 EditText 字段时禁用了 AlertDialog。这第一次完美运行,但是如果用户关闭对话框然后再次单击该字段,应用程序会崩溃。
roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
.minValue(1)
.maxValue(15)
.defaultValue(1)
.textSize(20)
.enableFocusability(false)
.wrapSelectorWheel(true)
.build();
roomEdit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder(SearchActivity.this)
.setView(roomnumberPicker)
.setTitle("Pick number of Rooms:")
.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
}
}).show();
}
});
哪些错误:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
[编辑] 使 roomnumberPicker 最终化。您将能够访问它。
您的 MaterialNumberPicker 是第一次附加到其父级。因此,第二次开始时,当您尝试再次将其添加到新的 AlertDialog 时,它会向您抛出该异常。
试试这个:
roomEdit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final MaterialNumberPicker roomnumberPicker = new MaterialNumberPicker.Builder(SearchActivity.this)
.minValue(1)
.maxValue(15)
.defaultValue(1)
.textSize(20)
.enableFocusability(false)
.wrapSelectorWheel(true)
.build();
new AlertDialog.Builder(SearchActivity.this)
.setView(roomnumberPicker)
.setTitle("Pick number of Rooms:")
.setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
roomEdit.setText(Integer.toString(roomnumberPicker.getValue()));
}
}).show();
}
});