2015-07-06 15 views
10

Özellikle getActivity() numaralı telefonu arayabilmem için Fragmentlifecycle ile karıştırıyorum. Bazen'u getActivity()'a alamazsınız. Ve her zaman bazı şaşırtıcı böceklere neden oldu.
Bulmacayı çözebilecek herkes için teşekkür ederiz. Parçanız hazırlık aşamasında ve hazır olmak üzere iken null olabilir (neden onActivityCreated'den önce çalışan onCreateView'da getActivity() öğesini arayabiliriz?

+0

İlgili kod örneği lütfen! – alfasin

+1

[Fragments belgeleri] 'nden (http://developer.android.com/guide/components/fragments.html): 'Dikkat: Parçanızda bir Context nesnesine ihtiyacınız varsa getActivity() öğesini çağırabilirsiniz. Ancak, getActivity() öğesini yalnızca parça bir etkinliğe eklendiğinde çağırmaya dikkat edin. Parça henüz eklenmediyse veya yaşam döngüsünün sonunda ayrıldığında, getActivity() öğesi null.' döndürecektir. Yani, onAttach'dan çağrılmalıdır. –

+1

@EricMartinez Bunun belgelerin doğru bir şekilde yorumlanması olduğunu sanmıyorum. Anlayışım, onAttach() çağrıldığında parçayla ilişkili olduğundan, onCute() ve onCreateView() gibi aşağıdaki yaşam döngüsü yöntemleri için de kullanılabilir olması gerekir.(). Her neyse, onCreateView() 'da getActivity() öğesini çağırırken ve yazdığım tüm Android uygulamaları bunu yaparken null diye hatırlamıyorum. – RenniePet

cevap

10

. Parça ömür döngüsü geri arama yöntemlerine bağlıdır. Parça hazırlanırken bu yöntem zaman içinde bir yere çağrılacaktır.

  • Fragment.onActivityCreated(Bundle)

    fragmanı aktivitesi, boş olmayacaktır, yani getActivity() geçerli örneği olacaktır yerdir. etkinlik varlığı için onCreateView()

bile Kişisel güvenli bahis sonra Olur:

+1

OnCreate'da bir bağdaştırıcı oluşturmak için bir etkinliğe ihtiyacım varsa ne olur? –

+3

'Fragment.onViewCreated (View, Bundle)' kısmında 'getActivity() == null' var, bu yüzden güvenli değil, her zaman getActivity() 'in' onCreateView() 'değerinde olup olmadığını kontrol etmelisiniz. 'onViewCreated()' ve hatta 'onResume()' –

+4

Bazı şeylere bahse girmeyiz. Ya, onAttach() 'da geçerli bir Etkinlik olması gerekiyordu ya da değil. Neden getActivity() kullanımı için net bir cevap yok? –

İlgili konular