Android id无法访问DialogFragment布局的View元素

Android id无法访问DialogFragment布局的View元素,android,android-dialogfragment,android-library,dialogfragment,Android,Android Dialogfragment,Android Library,Dialogfragment,我有一个自定义的DialogFragment,它的布局只包含一个EditText元素 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

我有一个自定义的DialogFragment,它的布局只包含一个EditText元素

布局:

<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/reminder"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder_message"
        android:inputType="text" />
</LinearLayout>
它在应用程序模块中运行良好。但我想进入图书馆模块。但是我调试了错误,因为 R.id.提示为0

是否仍有访问该元素的权限。

尝试使用getDialog().findViewById()而不是rootView.findViewById(R.id.rementer)

**

编辑

**

尝试使用

你能行

getResources().getIdentifier(“res_名称”、“res_类型”、“com.library.package”)

就你而言:

R.id.提醒将是:


getResources().getIdentifier(“提醒”、“id”、“com.library.package”)

尝试转换提供的对话框实例,然后查找视图:

((Dialog) dialog).findViewById(R.id.reminder); 

别忘了转换到您正在使用的适当类型的对话框,但一般来说,对话框应该可以工作

方法
onCreateView
对DialogFragments无效。
您应该覆盖:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), null);
    dialog.setContentView(R.layout.fragment_reminder);
    return dialog;
}
然后,正如Ognov Zair指出的,您可以使用
getDialog()


我还检查了你的解决方案。视图id没有任何问题!如果它在那里,它与您的本地设置有关。因此,请运行:

gradlew clean 
然后重新构建项目。 我得到的唯一错误与检索文本输入时执行的错误转换有关:

06-19 10:38:29.602 7974-7974/com.palup.locationalert E/AndroidRuntime: 致命异常:主 进程:com.palup.locationalert,PID:7974 java.lang.ClassCastException:android.text.SpannableStringBuilder 无法转换为java.lang.String 在 com.palup.library.fragment.rementerdialog.onDismiss(rementerdialog.java:47) 在android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1323) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5417) 位于java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

因此,只需在提醒对话框中更新您的代码:

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    if (onDismissListener != null) {
        String text = ((EditText) (rootView.findViewById(R.id.reminder))).getText().toString();
        onDismissListener.onDismiss(text);
    }
}

你想做什么?为什么在ondismissI中访问它?我长按地图标记的信息窗口,打开一个包含EditText元素的DialogFragment。我不想有任何提交按钮。一旦用户关闭对话框,InfoWindow中的文本就会被设置。getDialog()将返回null。它将不起作用,因为R.id.rem余数将变为0。您可以使用getResources()。getIdentifier(“res_name”、“res_type”、“com.library.package”);在您的例子中:R.id.remention应该是:getResources().getIdentifier(“remention”、“id”、“com.library.package”);检查你的R.class的导入,也许你的R是从你的图书馆导入的嗨,Ognev,我检查过了。但这不是问题所在。你能看一下密码吗。如果你不介意的话,我可以邮寄给你。请给我发空味精kuldeep5534@gmail.com谢谢,它不会工作,因为R.id.restines即将为0,它不会工作,因为R.id.restines即将为0
gradlew clean 
@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    if (onDismissListener != null) {
        String text = ((EditText) (rootView.findViewById(R.id.reminder))).getText().toString();
        onDismissListener.onDismiss(text);
    }
}