2015-12-02 39 views
-1

的时候,当我启动应用程序第一次下面的代码只是正常返回null。但离开应用程序,并再次打开它时,我得到一个错误说getActivity() returns null.Android的碎片 - 。getActivity()runOnUiThread重新启动应用程序

我做这个代码片段:

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

怎么办?

我怎样才能获得活动?

+1

你怎么会这么搜索,试试这个http://stackoverflow.com/questions/6215239/getactivity-returns-null-in-fragment-function – Hughzi

回答

5

创建活动的对象,并分配该上onAttach方法等下方。 有时,getActivity会给出null,因此它是在onAttach中创建活动实例并使用该实例的更好方法。

private Activity mActivity; 

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

立即使用该对象,而不是getActivity()

+0

这个答案并不能使sens ...'mActivity'将会是null,如果他将他的代码放在与现在的位置相同的时间/地点...显然他只需要将'getActivity()'调用移动到Fragment生命周期中的位置/时间/时,它不会在这里返回null ... – Selvin

+0

@Selvin什么happns是当你的段调用第一次连接到活动所以它工作正常,但是当片段是分离的'getActivity'也​​将null作为片段分离以当你以后来到片段'getActivity'的片段返回null时,但片段被分离,现在变成了片段ts onAttached方法将调用,以便您可以从那里获取新的活动对象。它的作品像魅力! – Sandy

+1

*当片段被分离时* <=这是关键... **那么你不应该使用父母(不再)在片段中的活动** ... *,它的作用就像魅力!!! *并可能停止工作在Android作为你不把片段的生命周期的考虑一些新的版本...这是程序多么糟糕由 – Selvin

1

方法onAttach(活动性)现在已经过时。 你应该使用这一个:

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