我试图将自定义字段添加到IconDialog(https://github.com/maltaisn/icondialoglib)
我在xml中添加了一个新的EditText,并尝试在我的活动onIconDialogIconsSelected(当按下此对话框的“选择”按钮时进行回调)中访问它。
editText.getText()始终为空,但是在视图中调试时可以看到它。
新课程:
public class InputIconDialog extends IconDialog {
private EditText editText;
public InputIconDialog() {
}
public String getInputText() {
View v = getLayoutInflater().inflate(R.layout.icd_dialog_icon, null);
editText = v.findViewById(R.id.icd_edt_InputName); // this editText exists but is always empty
return editText.getText().toString();
}
}
最佳答案
这里的问题是您实际上没有访问显示的视图。您在此行View
的空父级ViewGroup
上增加了一个新的View v = getLayoutInflater().inflate(R.layout.icd_dialog_icon, null);
。尽管已创建视图,但它并不依赖于任何UI。
另一个问题是,您已经在IconDialog
中将对话框的内容设置为在其中展开的视图dialog.setContentView(view);
。
一个简单的解决方案是允许IconDialog
的子级更改其基本布局。
public class IconDialog extends DialogFragment {
@LayoutRes
protected int layoutRes = R.layout.icd_dialog_icon;
Dialog onCreateDialog(final Bundle state) {
LayoutInflater inflater = LayoutInflater.from(context);
@SuppressLint("InflateParams") final View view = inflater.inflate(layoutRes, null);
}
public class InputIconDialog extends IconDialog {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layoutRes = R.layout.icd_dialog_icon;
}
这种解决方案的主要缺点是长期可维护性,因为
IconDialog
的子级需要使用<inclue
或复制在其布局中包括其依赖的所有视图。建议
我会在
onCreateView
中使用IconDialog
设置布局和视图,然后在InputIconDialog
中覆盖它并调用super。加上3个布局文件,一个用于icon_dialog,一个用于2个对话框之间的共享视图,一个用于input_icon_dialog。