gpt4 book ai didi

android - onAttach(上下文上下文)未被调用

转载 作者:行者123 更新时间:2023-11-29 17:24:01 25 4
gpt4 key购买 nike

我正在尝试使用 API 23 为 Android 应用程序创建一个 DialogFragment。我发现 onAttach 方法已针对此 API 更新,现在需要一个 上下文 作为参数。问题是,我无法让我的 DialogFragment 附加到我的 Activity。我收到以下异常:

02-10 21:09:31.852 22647-22647/com.dactylotech.dactylo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dactylotech.dactylo, PID: 22647
java.lang.IllegalStateException: Fragment ConnectionTypeAlertDialogFragment{c9d04dd} not attached to Activity
at android.app.Fragment.getResources(Fragment.java:805)
at android.app.Fragment.getString(Fragment.java:827)
at com.dactylotech.dactylo.ConnectionTypeAlertDialogFragment.<init>(ConnectionTypeAlertDialogFragment.java:17)
at com.dactylotech.dactylo.ListBTDevicesActivity$PairedBTDevicesClickable.onItemClick(ListBTDevicesActivity.java:129)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3049)
at android.widget.AbsListView$3.run(AbsListView.java:3886)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

在进行了彻底的研究并没有找到真正的答案之后,发现许多人遇到了完全相同的问题并声称它被窃听了,我决定研究 onAttach 的代码,它是以下内容:

public void onAttach(Context context) {
mCalled = true;
final Activity hostActivity = mHost == null ? null : mHost.getActivity();
if (hostActivity != null) {
mCalled = false;
onAttach(hostActivity);
}
}

如果我没记错的话,hostActivity 可以被赋值为 nullmHost.getActivity()。然而,由于这是对 mHost 的第一次调用(在 android 的 Fragment 生命周期之后),mHost 从一开始就是 null。这意味着表达式的计算结果为 TRUE,因此,它再次被赋值为 null!同样,如果我没记错的话,这就是为什么永远不会调用 onAttach(hostActivity),因此永远不会将 DialogFragment 附加到 Activity

我的问题是,我说得对吗?这就是为什么会这样吗?我想对此提出另一种观点。有什么办法可以解决这个问题吗?

编辑:此处为 onAttach 显示的代码是来自 Fragment java 类的代码。 (android.app.Fragment)

编辑#2:小崽子,好像一点错误都没有。我的问题的解决方案已发布。

最佳答案

在 fragment 的构造函数中,您正在调用 Fragment.getString()。此方法需要上下文来获取资源以获取字符串,从而尝试获取 Activity 。

Fragment ConnectionTypeAlertDialogFragment{c9d04dd} not attached to Activity 告诉您 Activity 未设置。这是因为构造函数在任何其他生命周期事件(如 onAttach())之前被调用。

您应该避免在构造函数中对 fragment 进行任何初始化,而只使用生命周期事件。这样你就可以确保你需要的状态。例如,您可以将围绕 getString() 的逻辑移动到 onAttach()

关于android - onAttach(上下文上下文)未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com