I am trying to to create a Spinner
inside a Fragment
but I am getting error in the ArrayAdapter
constructor call. I don't know why, but it has a red underline. Other than that, there is no error. When I'm using the same ArrayAdapter
in an Activity
it works, but in a Fragment
, it gives an error.
My FirstFragment.kt
:
class FirstFragment : Fragment() {
private var mListener: OnFragmentInteractionListener? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater!!.inflate(R.layout.fragment_first, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
/*Find the id of spinner*/
val spinner = lol
/*set an adapter with strings array*/
spinner.adapter = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, resources.getStringArray(R.array.atoms)) as SpinnerAdapter?
/*set click listener*/
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
val num = when (spinner.selectedItem.toString()) {
"H" -> editText.setText("1")
"He" -> editText.setText("4")
"C" -> editText.setText("12")
"O" -> editText.setText("16")
else -> editText.setText("")
}
}
override fun onNothingSelected(parent: AdapterView<*>) {
/*Do something if nothing selected*/
}
}
button.setOnClickListener {
if (
editText2.text.toString().length > 0 &&
editText.text.toString().length > 0) {
val num2 = editText.text.toString().toDouble()
val num1 = editText2.text.toString().toDouble()
val num = num1/num2
textView.setText("$num moles")
}
else {
textView.setText("Please Enter a correct value")
}
}
}
}
My fragment_first.xml
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.a3.aakap.ftrial.FirstFragment">
<android.support.constraint.ConstraintLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textView"
android:layout_width="294dp"
android:layout_height="80dp"
android:layout_weight="1"
android:text="Amswer : No of Moles"
android:textAlignment="center"
android:textSize="20sp"
app:layout_anchorGravity="right|top"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.556" />
<TextView
android:id="@+id/textView1"
android:layout_width="143dp"
android:layout_height="46dp"
android:layout_weight="1"
android:text="Amount in Grams "
android:textAlignment="center"
android:textSize="20sp"
app:layout_anchorGravity="left|bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.066"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.305" />
<Spinner
android:id="@+id/lol"
android:layout_width="145dp"
android:layout_height="57dp"
app:layout_anchorGravity="left|top"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.07"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.136" />
<Button
android:id="@+id/button"
android:layout_width="138dp"
android:layout_height="43dp"
android:text="Calculate"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.788" />
<EditText
android:id="@+id/editText"
android:layout_width="148dp"
android:layout_height="57dp"
android:ems="10"
android:hint="Gram"
android:inputType="numberDecimal|number"
app:layout_anchorGravity="bottom|center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.762"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.137" />
<EditText
android:id="@+id/editText2"
android:layout_width="148dp"
android:layout_height="57dp"
android:ems="10"
android:hint="Gram"
android:inputType="numberDecimal|number"
app:layout_anchorGravity="center_horizontal|center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.716"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.288" />
</android.support.constraint.ConstraintLayout>
</FrameLayout>
This example demonstrates how to use ArrayAdapter in android to create a simple listview in Kotlin. Step 1 − Create a new project in Android Studio, go to File ⇒New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main.xml. Step 3 − Add the following code to MainActivity.kt
This example demonstrates how to send data from one Fragment to another using Kotlin. Step 1 − Create a new project in Android Studio, go to File ⇉ New Project and fill all required details to create a new project.
Step 1 − Create a new project in Android Studio, go to File ⇉ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main.xml. Step 3 − Create two FragmentActivity and add the codes which are given below.
It converts data from the data sources into view items that can be displayed into the UI Component. Data Source can be Arrays, HashMap, Database, etc. and UI Components can be ListView, GridView, Spinner, etc. ArrayAdapter is the most commonly used adapter in android.
The problem is in this constructor call:
spinner.adapter = ArrayAdapter(
this,
R.layout.support_simple_spinner_dropdown_item,
resources.getStringArray(R.array.atoms)
) as SpinnerAdapter
The argument this
must be a reference to a Context
, and a Fragment
is not a Context
. In an Activity
it works because an Activity
is a Context
.
The solution is to replace this
with activity
:
spinner.adapter = ArrayAdapter(
activity,
R.layout.support_simple_spinner_dropdown_item,
resources.getStringArray(R.array.atoms)
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With