Android Fragment-getActivity().runOnUiThread在重新启动应用程序时返回null

Android Fragment-getActivity().runOnUiThread在重新启动应用程序时返回null,android,android-activity,android-fragmentactivity,Android,Android Activity,Android Fragmentactivity,当我第一次启动应用程序时,下面的代码工作正常。但是,当离开应用程序并再次打开它时,我会看到一个错误,即getActivity()返回null。 我在一个片段中编写这段代码: (getActivity()).runOnUiThread(new Runnable() { @Override public void run() { enableMenu(); openMenu

当我第一次启动应用程序时,下面的代码工作正常。但是,当离开应用程序并再次打开它时,我会看到一个错误,即
getActivity()返回null。

我在一个片段中编写这段代码:

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


如何获取活动?

创建活动对象,并在下面的onAttach方法上分配该对象。 有时getActivity会给出null,所以在onAttach中创建活动实例并使用该实例是一种更好的方法

private Activity mActivity;

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

现在使用这个对象而不是
getActivity()
创建活动对象,并在下面的onAttach方法上分配它。 有时getActivity会给出null,所以在onAttach中创建活动实例并使用该实例是一种更好的方法

private Activity mActivity;

@Override
public void onAttach(Activity activity) {
   super.onAttach(activity);
   mActivity = activity;
}
现在使用这个对象而不是
getActivity()

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

@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = getActivity();
}
onAttach(活动)方法现在已被弃用。 你应该使用这个:

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

你搜索了吗,试试这个你搜索了吗,试试这个答案没有意义<如果他在现在所在的时间/地点调用代码,则代码>活动性将为空。。。显然,他只需要移动
getActivity()
调用片段生命周期中不返回null的位置/时间…@Selvin这里发生的是当您的片段第一次调用时,它被附加到活动上,所以工作正常,但是当片段被分离时,它的
getActivity
也会随着片段被分离而变为null,所以当您以后遇到相同的片段时该片段
getActivity
返回null,但由于片段已分离,现在将调用fragments-onAttached方法,因此您可以从那里获取新的Activity对象。而且它像魅力一样工作!!!当片段被分离@Selvin时,我只是说在调用该方法之后,活动将在OnAttached方法中可用。请注意:如果在片段中需要上下文对象,可以调用getActivity()。但是,请注意仅当片段附加到活动时才调用getActivity()。当片段尚未附加或在其生命周期结束时被分离时,getActivity()将返回null。在开发者博客上写下,如果你有任何合适的解决方案,它将被推荐please@Selvin:我知道这是一篇很老的文章,但是如果我想开始一个新的活动,我怎么能在片段中“不使用”父活动呢?在本例中,我在调用newintent(getActivity(),newActivity.class)时得到了NPE;这个答案没有道理<如果他在现在所在的时间/地点调用代码,则代码>活动性将为空。。。显然,他只需要移动
getActivity()
调用片段生命周期中不返回null的位置/时间…@Selvin这里发生的是当您的片段第一次调用时,它被附加到活动上,所以工作正常,但是当片段被分离时,它的
getActivity
也会随着片段被分离而变为null,所以当您以后遇到相同的片段时该片段
getActivity
返回null,但由于片段已分离,现在将调用fragments-onAttached方法,因此您可以从那里获取新的Activity对象。而且它像魅力一样工作!!!当片段被分离@Selvin时,我只是说在调用该方法之后,活动将在OnAttached方法中可用。请注意:如果在片段中需要上下文对象,可以调用getActivity()。但是,请注意仅当片段附加到活动时才调用getActivity()。当片段尚未附加或在其生命周期结束时被分离时,getActivity()将返回null。在开发者博客上写下,如果你有任何合适的解决方案,它将被推荐please@Selvin:我知道这是一篇很老的文章,但是如果我想开始一个新的活动,我怎么能在片段中“不使用”父活动呢?在本例中,我在调用newintent(getActivity(),newActivity.class)时得到了NPE;