Android id无法访问DialogFragment布局的View元素
我有一个自定义的DialogFragment,它的布局只包含一个EditText元素 布局: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"
<?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);
}
}