When developing Android apps using Kotlin, a common issue faced by developers is when findViewById
returns null
, causing a NullPointerException
. This typically happens due to improper view binding, incorrect layout reference, or accessing the view before setContentView
is called.

In this article, we will explore multiple solutions to fix the findViewById
null issue in Kotlin with proper code examples. Whether you’re using traditional findViewById
, View Binding, or Kotlin synthetic properties, the key is to access the views after the layout has been correctly set.
We’ll also walk through the correct setup using both Activity and Fragment in Android.
Common Causes of findViewById
Returning Null
setContentView
is not called before accessing views.- Wrong layout file is passed to
setContentView
. - Wrong view ID used in
findViewById
. - Using
findViewById
in aFragment
before the view is created.
Solution 1: Correct Order in Activity
// MainActivity.kt import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var myTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Must come before findViewById myTextView = findViewById(R.id.textView) myTextView.text = "Hello, Kotlin!" } }
Solution 2: Use View Binding (Recommended)
View Binding helps reduce nullability and is more robust than findViewById
.
// MainActivity.kt import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.example.app.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.textView.text = "Hello with ViewBinding" } }
Solution 3: Correct findViewById
in Fragment
// ExampleFragment.kt import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment class ExampleFragment : Fragment() { private lateinit var textView: TextView override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.fragment_example, container, false) textView = view.findViewById(R.id.textView) textView.text = "Fragment View Loaded" return view } }
External Reference
For official documentation on View Binding in Android, visit Android Developers.