我有一个自定义的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>
代码:
public class ReminderDialog extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_reminder, container, false);
return rootView;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
String text = (String) ((TextView) (rootView.findViewById(R.id.reminder))).getText();
onDismissListener.onDismiss(text);
}
}
它在app模块中运行良好。但我想进入图书馆模块。但后来我调试了错误,这是因为 R.id.reminder是0。
无论如何都要访问该元素。
答案 0 :(得分:0)
尝试使用getDialog()。findViewById()而不是rootView.findViewById(R.id.reminder)
**
修改
**
尝试使用
你可以做到
getResources()。getIdentifier(“res_name”,“res_type”,“com.library.package”);
在你的情况下:
R.id.reminder将是:
getResources()。getIdentifier(“提醒”,“id”,“com.library.package”);
答案 1 :(得分:0)
尝试转换提供的Dialog实例,然后找到视图:
((Dialog) dialog).findViewById(R.id.reminder);
不要忘记使用你正在使用的相应类型的Dialog,但总的来说Dialog应该可以解决。
答案 2 :(得分:0)
方法onCreateView
对DialogFragments没用
你应该覆盖:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), null);
dialog.setContentView(R.layout.fragment_reminder);
return dialog;
}
然后,正如Ognev Zair指出的那样,你可以使用getDialog()
:
String text = (TextView) (getDialog().findViewById(R.id.reminder))).getText().toString();
答案 3 :(得分:0)
我也检查了你的解决方案。视图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.ReminderDialog.onDismiss(ReminderDialog.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) at java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
所以只需在ReminderDialog中更新您的代码:
@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);
}
}