2015-12-02 73 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(); 
}