如何使用Kotlin在片段中使用ArrayAdapter [英] How to use an ArrayAdapter in a Fragment with Kotlin
问题描述
我试图在Fragment
内创建一个Spinner
,但是在ArrayAdapter
构造函数调用中遇到错误.我不知道为什么,但是有红色下划线.除此之外,没有任何错误.当我在Activity
中使用相同的ArrayAdapter
时,它可以工作,但是在Fragment
中,则出现错误.
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.
我的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")
}
}
}
}
我的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>
推荐答案
问题出在此构造函数调用中:
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
自变量this
必须是对Context
的引用,而Fragment
不是Context
.在Activity
中它起作用,因为Activity
是Context
.
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
.
解决方案是将this
替换为activity
:
spinner.adapter = ArrayAdapter(
activity,
R.layout.support_simple_spinner_dropdown_item,
resources.getStringArray(R.array.atoms)
)
这篇关于如何使用Kotlin在片段中使用ArrayAdapter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!