我有以下代码,在单击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:指定的子节点已经有了 家长。您必须首先在孩子的父母身上调用removeView()。
答案 0 :(得分:0)
[编辑]使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();
}
});