[英]Extending a CustomDialog, edittext always empty
我正在尝试向 IconDialog 添加自定义字段( https://github.com/maltaisn/icondialoglib )
我在 xml 中添加了一个新的 EditText,我试图在我的活动 onIconDialogIconsSelected 中访问它(这是按下此对话框的 Select 按钮时的回调)。
editText.getText() 始终为空,但在视图中调试时我可以看到它。
新的 class:
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();
}
}
这里的问题是您实际上并没有访问显示的视图。 您在这一行的 null 父ViewGroup
上膨胀了一个新View
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
或复制包含它所依赖的所有视图。
推荐
我会在
IconDialog
中使用onCreateView
来设置布局和视图,然后在InputIconDialog
中覆盖它并调用 super。 再加上 3 个布局文件,一个用于 icon_dialog,一个用于 2 个对话框之间的共享视图,一个用于 input_icon_dialog。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.