7

내 프로젝트를 SDK 버전 27로 업데이트했고 지원 라이브러리의 버전을 27.0.0으로 변경하려면 코드를 변경해야했습니다.Android 지원 라이브러리 27, 조각 업데이트?

26.1.0로 나는 그냥 (코 틀린 context와) getContext()을 사용할 수 있습니다 내 Fragment (android.support.v4.app) 내가 더 Null 허용 문제가 없지만, 내가 코 틀린를 사용하기 때문에 내가 버전 27.0.0에 문제가, 내 모든 context 호출은 더 이상 작동하지 않았다 나는 context!!처럼 안전 연산자를 필요로하지만, 나는 개인적으로 발견 이후, 난 그냥 내 자신을 만들 때마다 내가 기능을

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

또 다른 것은 갑자기 그 변화를 (해결하는 것이 할 수있는 허슬로하고 나는 이유는 오전) 방법은 onCreateView()과입니다.. onCreateView에서 인플레이터는 더 이상 null이 아니므로 onCreateView(inflater: LayoutInflater?...)에서 onCreateView(inflater: LayoutInflater...)으로 올바르게 재정의하고 createdView 매개 변수와 동일하게 onViewCreated에서 함수 서명을 변경해야했습니다.

그래서 지금은 왜 (코 틀린을 위해) 매우 못생긴 getContext() 변경이 이루어졌고, https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html으로 향하고 있는지 궁금합니다.

그러나 잠깐, 분명히 변경하지 않았습니까? 그래서 지금 제 질문은 제가 잘못하고 있거나 정말로 그것을 바꾼 것이고, 그렇다면 왜 그런지 물을 수 있습니다. 그런데

는, 같은 내가 mHost == null 검사가 추가되었습니다 생각 getActivity() 적용하고 getActivity 방법도 최종, 그래서 나는 아주 아주 추악하게 거기에 내 해결 방법을 사용할 수 없습니다. 실제로 소스 파일에서 메소드는 동일하게 보이지만 26.1.0에는 Kotlin 리턴 유형 Context!27.0.0 리턴 유형 Context?이 있습니다.

+0

Sligthly related ... non-infater는 사용자가 없지만 작업자로 사용되는 fragmen은 이제 대안이 아닙니까? – cutiko

+0

@cutiko 무슨 뜻인지 모르겠다. – creativecreatorormaybenot

답변

13

이는 의도적으로 변경되었습니다. 이 버전의 지원 라이브러리 이전에이 클래스에는 null 허용 주석이 없었으므로 Kotlin에서이 유형은 모두 platform types입니다. 27에서는 필요한 주석을 추가 했으므로 이제 이러한 유형은 Kotlin에서 nullable 또는 nullable로 표시됩니다. null이 될 수 있는지 여부는 추측 할 필요가 없습니다. 당신이 언급 한 구체적인 방법에 관해서는

는 다음 FragmentActivity에 연결되지 않은 경우,이 방법은 이미 null을 반환하기 때문에

  • getActivitygetContext 방법은 nullable 형식을 반환합니다. 행동에 변화가 없으며 지금은 명시 적으로 표시되어 있으므로 안전하게 처리 할 수 ​​있습니다.
  • onCreateView 메서드의 inflater 매개 변수는 플랫폼 유형 이었기 때문에 nullable로 표시했는지 여부는 사용자가 결정했습니다. null으로 결코 호출되지 않으므로 @NonNull으로 명시 적으로 주석을 달았으므로 Kotlin의 유형은 이제 "looser"LayoutInflater! 유형 대신 정확히 LayoutInflater입니다.
+3

대답 해 주셔서 감사합니다. 제 경우에는'getContext()'도 null이 아니며'getActivity()'도 없기 때문에 Kotlin에게는 매우 추악합니다.즉, 나는 이제 모든 호출에 대해 그 뒤에 배후에'!!'을 주장해야하며 이는 매우 성가시다. – creativecreatorormaybenot

+0

activity/fragment가 null 인 곳에서 메소드를 호출 할 수 있다면 NULL 어설 션'!!'을 사용하는 것과 다르게 처리 할 수 ​​있습니다. 다른 접근법은 예를 들어, 'activity? .let {/ * Do something * /}' – Fhl

관련 문제