7

चूंकि मैंने अपनी परियोजना को एसडीके संस्करण 27 में अपडेट किया है और समर्थन लाइब्रेरी के लिए संस्करण 27.0.0 पर प्लगइन को दोहराया है, इसलिए मुझे अपना कोड बदलना होगा।एंड्रॉइड समर्थन पुस्तकालय 27, टुकड़ा अद्यतन?

26.1.0 के साथ मैं बस में getContext() (Kotlin context के साथ) का उपयोग कर सकते मेरी Fragment (android.support.v4.app) और मेरे पास कोई nullability मुद्दे हैं, लेकिन जब से मैं Kotlin का उपयोग मैं संस्करण 27.0.0 साथ एक समस्या है, मेरे सभी context कॉल अब और काम नहीं किया , मैं एक सुरक्षा ऑपरेटर की जरूरत है, context!! की तरह है, लेकिन यह है कि हर बार जब मैं सिर्फ अपने आप को बना रहा समारोह

override fun getContext() = super.getContext()!! 

एक और बात है कि परिवर्तन (अचानक वैकल्पिक हल करने के लिए एक ऊधम मानेंगे, क्योंकि मैं व्यक्तिगत रूप से खोजने के लिए और है कि मैं क्यों है पूछ रहा हूँ) विधियां onCreateView() औरहैं। onCreateView में inflater अब और संभवतः रिक्त नहीं है, इसलिए मैं अपने समारोह हस्ताक्षर बदलने के लिए ठीक से onCreateView(inflater: LayoutInflater?...) से onCreateView(inflater: LayoutInflater...) और onViewCreated में createdView पैरामीटर के लिए एक ही करने के लिए ओवरराइड करने के लिए की जरूरत है।

तो अब मैं सोच रहा था क्यों, विशेष रूप से (Kotlin के लिए) बहुत बदसूरत getContext() बदलाव किया गया था और https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html के लिए खत्म नेतृत्व किया।

लेकिन रुकिए, जाहिरा तौर पर वे इसे बदल नहीं किया था? तो अब मेरा सवाल यह है कि अगर मैं कुछ गलत कर रहा हूं या यदि उन्होंने वास्तव में इसे बदल दिया है और यदि ऐसा है तो मैं उनसे पूछ सकता हूं क्यों?

वैसे, एक ही getActivity() के लिए लागू होता है, मुझे लगता है कि mHost == null जांच जोड़ा गया था और getActivity विधि भी अंतिम है, इसलिए मैं वहाँ मेरे वैकल्पिक हल है, जो यह बहुत बहुत बदसूरत बना देता है का उपयोग नहीं कर सकते हैं। असल स्रोत में फ़ाइलें पद्धतियां ठीक उसी तरह लग रही है, लेकिन 26.1.0 Kotlin वापसी प्रकार Context! और 27.0.0 वापसी प्रकार Context? है।

+0

sligthly संबंधित ... गैर अशक्त inflater कोई ui साथ fragmen का मतलब है, लेकिन कर्मचारी के रूप में इस्तेमाल नहीं किया एक विकल्प अब कर रहे हैं? – cutiko

+0

@ क्यूटिको मुझे नहीं पता कि आपका क्या मतलब है। – creativecreatorormaybenot

उत्तर

13

ये जानबूझकर परिवर्तन थे। समर्थन पुस्तकालय के इस संस्करण से पहले, इन कक्षाओं में कोई शून्यता एनोटेशन नहीं था, इसलिए कोटलिन से, ये सभी प्रकार केवल platform types थे। 27 में, उन्होंने जरूरी एनोटेशन जोड़े, इसलिए अब इन प्रकारों को कोटलिन में या तो शून्य या गैर-नामुमकिन के रूप में चिह्नित किया गया है - यह अनुमान लगाने की कोई आवश्यकता नहीं है कि वे null हो सकते हैं।

विशिष्ट विधियों आप उल्लेख किया है के लिए के रूप में:

  • getActivity और getContext तरीकों नल प्रकार क्योंकि जब Fragment एक Activity से जुड़ी नहीं है, इन तरीकों को पहले से ही null लौटे लौट आते हैं। व्यवहार में कोई बदलाव नहीं है, यह अभी स्पष्ट रूप से चिह्नित है, इसलिए आप इसे सुरक्षित रूप से संभाल सकते हैं।
  • एक मंच प्रकार हुआ करता था onCreateView विधि के inflater पैरामीटर है, तो यह आप पर निर्भर था कि क्या आप यह नल या नहीं चिह्नित। चूंकि यह null के साथ कभी नहीं बुलाया जाएगा, यह स्पष्ट रूप से @NonNull के रूप में एनोटेट कर दिया गया है, इसलिए Kotlin में अपनी तरह अब सख्ती से "हारने" LayoutInflater! प्रकार के बजाय LayoutInflater है।
+3

आपके उत्तर के लिए धन्यवाद। यह कोटलिन के लिए बहुत बदसूरत है क्योंकि मेरे मामले में 'getContext() 'कभी भी शून्य नहीं होगा, न ही' निष्क्रियता()' प्राप्त करें।इसका मतलब है कि अब मुझे हर कॉल के लिए उनके पीछे '!!' जोर देना होगा, जो बहुत परेशान है। – creativecreatorormaybenot

+0

ध्यान दें कि यदि विधि को बुलाया जा सकता है जहां गतिविधि/टुकड़ा शून्य है, तो आप शून्य दावे '!!' का उपयोग करने से अलग तरीके से इसे संभालना चाहते हैं। एक अन्य दृष्टिकोण का उपयोग करना है उदा। 'गतिविधि? .लेट {/ * कुछ करें * /}' – Fhl

संबंधित मुद्दे