Reputation: 576
I am writing a piece of code that sets the options within a Spinner. Below is my code conected to the fragment:
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.example.alarmeventtest.R
/**
* A placeholder fragment containing a simple view.
*/
class PlaceholderFragment : Fragment() {
private lateinit var pageViewModel: PageViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
pageViewModel = ViewModelProviders.of(this).get(PageViewModel::class.java).apply {
setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_main, container, false)
// UI initialization: Set options of the drop-down menu
// Set the contents of the drop-down menu (Spinner)
val spinnerArray =
arrayOf("All Events", "Your Alarms", "Non-Alarm Events")
val alarmOptions = root.findViewById<Spinner>(R.id.alarm_viewing_options)
val adapter = ArrayAdapter(
context,
android.R.layout.simple_spinner_item,
spinnerArray
)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
alarmOptions.adapter = adapter
return root
}
}
At this piece of code:
val adapter = ArrayAdapter(
context,
android.R.layout.simple_spinner_item,
spinnerArray
)
In the function:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
I get the following error:
Type Mismatch: Required: Context Found: Context?
How do I convert context to a non-nullable data type?
Upvotes: 0
Views: 450
Reputation: 41
Use requireContext() instead of context. requireContext() returns a nonnull Context, or throws an exception when one isn't available instead of context.
Upvotes: 0
Reputation: 3569
You can instead use requireContext()
if you are certain the fragment is associated with a Context
(e.g. a valid host Activity
), like so:
val adapter = ArrayAdapter(
requireContext(),
android.R.layout.simple_spinner_item,
spinnerArray
)
If the fragment isn't associated with a Context
, it will result in an IllegalArgumentException
being thrown.
Upvotes: 3