2017-10-30 12 views
12

サポートライブラリをv-26.1.0からv-27.0.0にアップデートした後で、私のフラグメントに複数のエラーがあります。空のフラグメントのためのアンドロイドスタジオのテンプレートからサポートライブラリを27.0.0にアップデートした後でフラグメントに複数のエラーが発生しました

Error: Smart cast to 'Bundle' is impossible, because 'arguments' is a mutable property that could have been changed by this time.

Error: 'onCreateView' overrides nothing

Error: 'onViewCreated' overrides nothing

Error: Type mismatch: inferred type is View? but View was expected

Error: Type mismatch: inferred type is Context? but Context was expected

Error: Type mismatch: inferred type is FragmentActivity? but Context was expected

Error: Type mismatch: inferred type is FragmentActivity? but Context was expected

:ここ

いくつかのこれらのエラーのリストです。これらのエラーのすべての

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    if (arguments != null) { 
     mParam1 = arguments.getString(ARG_PARAM1) 
     mParam2 = arguments.getString(ARG_PARAM2) 
    } 
} 

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
    return inflater!!.inflate(R.layout.fragment_blank, container, false) 
} 

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { 
    super.onViewCreated(view, savedInstanceState) 
} 
+0

これらのエラーの原因となるコード例を示してください。新しいコード例の作成に関するヒントについては、[mcve]を参照してください。 –

答えて

25

根本原因は、サポートライブラリにV-27.0.0 @Nullable@NonNull注釈が追加されているということです。
であり、kotlin言語はNULLと認識しており、Javaと異なり、NullableNonNullの型が異なります。
これらの注釈がないと、コンパイラはそれらを区別することができず、Androidスタジオは正しいタイプを推測するように最善を尽くしていました。

TL; DR:NULL可能性状態を正しく反映するように型を変更します。


Error: Smart cast to 'Bundle' is impossible, because 'arguments' is a mutable property that could have been changed by this time.

変更arguments.getString(ARG_NAME) ==>arguments?.getString(ARG_NAME) ?: ""


Error: 'onCreateView' overrides nothing

chane:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? 

==>

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 

Error: 'onViewCreated' overrides nothing

変化:

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) 

==>

override fun onViewCreated(view: View, savedInstanceState: Bundle?) 

Error: Type mismatch: inferred type is Context? but Context was expected

コンテキストメソッドに引数として渡された場合、チュをgetContext()?.let{}
と置き換えるクイックフィックスを使用してください。コトリンショートバージョンcontextにも同じことが適用されます。いくつかの方法がgetContext()?.someMethod()

同じでgetContext().someMethod()を置き換える呼び出すために使用されている場合、他の

はkotlinショートバージョンcontext?.someMethod()に適用されます。


Error: Type mismatch: inferred type is FragmentActivity? but Context was expected

前のエラーの修正プログラムを使用。

+3

'?を追加しています。フラグメントのアクティビティに{} 'を使っても、それをメソッドの引数として使用することはできません。エラーは '型不一致:推定型はFragmentActivityですか?しかし文脈は期待された。これを行う別のものはありますか?さらに、たとえば 'cacheDir'にアクセスしようとすると、' activity 'がオープンまたはカスタムゲッターを持つプロパティであるため、 'FragmentActivity'へのスマートキャストは不可能です。それでもこの問題を解決する方法を見つける必要があります。 –

関連する問題