我试图将自定义字段添加到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。

10-04 12:23