【问题标题】:Android Fragment - getActivity().runOnUiThread returns null when restarting appAndroid Fragment - getActivity().runOnUiThread 在重新启动应用程序时返回 null
【发布时间】:2015-12-02 09:35:06
【问题描述】:

当我第一次启动应用程序时,下面的代码运行良好。但是当离开应用程序并再次打开它时,我收到一条错误消息getActivity() returns null.

我正在片段中执行此代码:

(getActivity()).runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    enableMenu();
                    openMenu();
                    navigateToFragment(new BlankFragment());
                }
            });

怎么办?

如何获取活动?

【问题讨论】:

标签: android android-activity android-fragmentactivity


【解决方案1】:

创建 Activity 对象并将其分配给 onAttach 方法,如下所示。 有时 getActivity 给出 null 所以它是在 onAttach 中创建活动实例并使用该实例的更好方法。

private Activity mActivity;

@Override
public void onAttach(Activity activity) {
   super.onAttach(activity);
   mActivity = activity;
}

现在用这个对象代替getActivity()

【讨论】:

  • 这个答案没有意义...mActivity 将是 null 如果他会在与现在相同的时间/地点调用他的代码...显然他只需要移动@ 987654325@ 调用片段生命周期中的地点/时间,其中/何时不会返回 null ...
  • @Selvin 发生了什么事情是当你的片段第一次调用它时它被附加到活动所以它工作正常但是当片段被分离时它的getActivity 也会随着片段被分离而变为空所以当你稍后来到片段getActivity 返回的同一个片段,但由于片段已分离,现在片段的onAttached 方法将调用,因此您可以从那里获取新的活动对象。它就像魅力一样!!!
  • 片段分离时 那么你不应该在片段中使用父(不再)Activity .. . 它像魅力一样工作!!!并且可能会停止在某些新版本的android中工作,因为您没有在帐户中记录片段的生命周期......这就是制作糟糕程序的原因
  • @Selvin 我只是说,在调用该方法之后,活动将在 onAtttached 方法中可用。检查此警告:如果您需要 Fragment 中的 Context 对象,您可以调用 getActivity()。但是,请注意仅当片段附加到活动时才调用 getActivity()。当片段尚未附加或在其生命周期结束时被分离时,getActivity() 将返回 null。写在开发者博客上developer.android.com/guide/components/fragments.html如果你有任何合适的解决方案,那么请
  • @Selvin :我知道这是很老的帖子,但是如果我想开始一个新的活动,如何在片段中“不使用”父活动?在这种情况下,我在调用 new Intent(getActivity(), newActivity.class); 中得到了 NPE;
【解决方案2】:

onAttach(Activity activity) 方法现已弃用。 你应该使用这个:

@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2012-07-25
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多