1. ホーム
  2. アンドロイド

[解決済み】KotlinフラグメントのviewにアクセスしようとするとNullPointerExceptionが発生する

2022-04-04 06:12:02

質問

でKotlin Android Extensionsを使用する方法 Fragment s? もし私がそれらを onCreateView() このようになります。 NullPointerException 例外が発生します。

原因:java.lang.NullPointerException。仮想的な呼び出しの試み メソッド 'android.view.View android.view.findViewById(int)' を実行します。 ヌルオブジェクト参照

以下は、その断片コードです。

package com.obaied.testrun.Fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*

public class CardSelectorFragment : Fragment() {
    val TAG = javaClass.canonicalName

    companion object {
        fun newInstance(): CardSelectorFragment {
            return CardSelectorFragment()
        }
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
        btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }

        return rootView
    }
}
`

解決するには?

Kotlinの合成プロパティは魔法ではなく、非常に単純な方法で動作します。アクセスしたときに btn_K を呼び出します。 getView().findViewById(R.id.btn_K) .

問題は、アクセスするのが早すぎることです。 getView() 戻る nullonCreateView . の中でやってみましょう。 onViewCreated メソッドを使用します。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
}