web-dev-qa-db-ja.com

サポートライブラリを27.0.0に更新した後、フラグメントに複数のエラーがあります

サポートライブラリをv-26.1.0からv-27.0.0に更新した後、フラグメントに複数のエラーがあります。

これらのエラーのリストを次に示します。

エラー:「バンドル」へのスマートキャストは不可能です。「引数」は変更可能なプロパティであり、この時点で変更されている可能性があるためです。

エラー: 'onCreateView'は何もオーバーライドしません

エラー: 'onViewCreated'は何もオーバーライドしません

エラー:タイプの不一致:推定タイプはビューですか?しかし、ビューが期待されていました

エラー:型の不一致:推定型はコンテキストですか?しかし、コンテキストが期待されていました

エラー:型の不一致:推定型はFragmentActivityですか?しかし、コンテキストが期待されていました

エラー:型の不一致:推定型はFragmentActivityですか?しかし、コンテキストが期待されていました

from Android空のフラグメントのためのスタジオのテンプレート。

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)
}
22
humazed

これらすべてのエラーの根本的な原因は、サポートライブラリv-27.0.0に@Nullableおよび@NonNullannotationsが追加されたことです。
およびkotlin言語はヌル可能性を認識しており、Javaとは異なり、NullableおよびNonNullに対して異なる型を持っているためです。
これらの注釈がなければ、コンパイラはそれらを区別する方法がなく、Androidスタジオは正しいタイプを推測するために最善を尽くしていました。

TL; DR:nullabilityステータスを正しく反映するようにタイプを変更します。


エラー:「バンドル」へのスマートキャストは不可能です。「引数」はこの時点で変更可能な変更可能なプロパティであるためです。

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


エラー: 'onCreateView'は何もオーバーライドしません

チェイン:

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

==>

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

エラー: 'onViewCreated'は何もオーバーライドしません

変化する:

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

==>

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

エラー:型の不一致:推定型はコンテキストですか?しかし、コンテキストが期待されていました

コンテキストが引数としてメソッドに渡される場合、クイックフィックスを使用してgetContext()getContext()?.let{}に置き換えるだけです
kotlinショートバージョンcontextにも同じことが当てはまります。

それ以外の場合は、何らかのメソッドの呼び出しに使用され、getContext().someMethod()getContext()?.someMethod()に置き換えます

同じことがkotlinショートバージョンcontext?.someMethod()にも当てはまります。


エラー:型の不一致:推定型はFragmentActivityですか?しかし、コンテキストが期待されていました

前のエラーの修正を使用してください。

38
humazed