繁体   English   中英

扩展一个CustomDialog,edittext总是空的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM