2013-03-21 60 views
7

在創建片段時,我遇到了getActivity()爲null。 所以爲了縮小這個問題,我在onAttach(活動活動)中保留了一個活動的本地副本,根據定義,它是附加到活動的時間。onAttach活動爲空

但是,我在onAttach中記錄了活動,但它仍然爲空。

我只在2.3.6及以下版本遇到這個問題。

這是支持包的已知問題嗎?

+0

旋轉設備後會發生這種情況嗎?無論如何,如果你等待'onActivityCreated()'會發生什麼? – Sam 2013-03-21 16:42:30

+0

這個應用程序特別禁用了旋轉。 onActivityCreated()仍然具有getActivity()作爲null,因爲之前我保留了一個本地副本來找出它的空位置。我的用戶界面操作方式已經過去了,getActivity()仍然是空的。 – 2013-03-21 16:45:17

回答

-3

這個問題是因爲支持包就意味着該片段是在Android 3.0及以上即API級別11和UP所以確保你將面臨崩潰的應用程序爲Android 2.3.6 gingerbird

this.getActivity(); 
+0

邁克已經知道這是支持包的一部分,這是一個鏈接到你自己的博客,你真的在​​那裏回答這個問題嗎?如果是這樣,請在這裏發佈解決方案,如果不是這樣,請刪除它,因爲您只是做廣告而不回答問題。 – Sam 2013-03-21 16:48:42

+0

這不是一個正確的答案,做你的研究,不要宣傳你自己的網站 – Tobrun 2013-03-21 16:50:38

+0

http://developer.android.com/reference/android/support/v4/app/Fragment.html – 2013-03-21 16:56:34

7

被稱爲將片段恢復到恢復狀態的一系列方法是:

  • onAttach(Activity)一旦片段與其活動相關聯就調用onAttach(Activity)。
  • onCreate(Bundle)調用來初始化片段的創建。
  • onCreateView(LayoutInflater,ViewGroup,Bundle)創建並返回與片段關聯的視圖層次結構。
  • onActivityCreated(Bundle)告訴片段其活動已完成自己的Activity.onCreate()。
  • onViewStateRestored(Bundle)告訴片段所有保存的視圖層次結構狀態已被恢復。
  • onStart()使片段對用戶可見(基於其包含的活動正在啓動)。
  • onResume()使片段與用戶交互(基於其包含的活動正在恢復)。

bold方法應該是getActivity不再返回null的方法。

onAttach方法不應該用來調用活動對象的方法,它應該用來初始化回調接口。這些接口的一個例子可以參見here

+1

事實是,它是空的。我確定先調用super.onAttach,然後跟蹤onAttach參數中的活動,它是空的。這是2.3.6用戶中的一小部分,這讓我懷疑它是一個錯誤。 getActivity(),不僅僅在onActivityCreated(Bundle)上,而且一直到onResume,都顯示爲null,這是促使我首先在onAttach上跟蹤的原因。 – 2013-03-21 16:53:47

+1

我一直在大量的2.x設備上運行類似的代碼。我曾經有類似的空指針,但是通過將一些代碼移動到onResume()來解決這些問題。 – Tobrun 2013-03-21 16:56:32

+0

然後在onAttach中初始化偵聽器的時候,它們可能會從null初始化並因此保持null本身。 – 2016-04-01 07:13:42