我有这段代码在点击listView中的项目时显示警告对话框;一切正常,直到我添加了一个复选框首选项,应该启用另一个对话框来输入文本字符串(稍后将使用)。
AlertDialog.Builder helpBuilder = new AlertDialog.Builder(MyActivity.this);
helpBuilder.setIcon(android.R.drawable.ic_dialog_info);
adb.setTitle("title");
adb.setMessage("message");
helpBuilder.setPositiveButton("positive", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
boolean fileRenameEnabled = settings.getBoolean("text_view", false);
if (fileRenameEnabled == true) {
AlertDialog.Builder adb = new AlertDialog.Builder(MyActivity.this);
LayoutInflater adbInflater = LayoutInflater.from(MyActivity.this);
View inputFilename = adbInflater.inflate(R.layout.dialog_text_view, null);
tv = (TextView) inputFilename.findViewById(R.id.tv);
tv.setHint("hint");
adb.setView(tv);
adb.setTitle("New filename");
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//some code here modifies method1()
method1();
}
});
adb.show();
} else {
method1();
}
}
});
helpBuilder.setNeutralButton("neutral", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Checkbox1Enabled = settings.getBoolean("checkbox1", true);
if (Checkbox1Enabled == true) {
AlertDialog.Builder adb = new AlertDialog.Builder(MyActivity.this);
LayoutInflater adbInflater = LayoutInflater.from(MyActivity.this);
View info = adbInflater.inflate(R.layout.dialog_checkbox1, null);
cb = (CheckBox) info.findViewById(R.id.cb);
cb.setChecked(true);
adb.setView(info);
adb.setTitle("title");
adb.setMessage("message");
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (cb.isChecked() == false) {
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("checkbox1", false);
editor.commit();
Checkbox1Enabled = settings.getBoolean("checkbox1", true);
Log.d(DEBUG_TAG, "Checkbox1Enabled: " + Checkbox1Enabled);
}
method2();
}
});
adb.show();
} else {
method2();
}
}
});
AlertDialog helpDialog = helpBuilder.create();
helpDialog.show();
}
});
}
事实是,我在onClickListener
内为中性按钮做了几乎相同的事情;唯一的区别是我在AlertDialog.Builder
而不是一个复选框(有效......)中膨胀了一个textView。
例外是:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
非常感谢任何帮助。 谢谢!
答案 0 :(得分:0)
您正在添加TextView
作为对话框的内容而不是夸大的布局(并且TextView
(很可能)已经在您展开的布局中拥有父级)。它应该是:
View inputFilename = adbInflater.inflate(R.layout.dialog_text_view, null);
tv = (TextView) inputFilename.findViewById(R.id.tv);
tv.setHint("hint");
adb.setView(inputFilename);