Spinner 在 Fragment 中没有项目 Android Studio Kotlin
Spinner has no items Android Studio Kotlin in Fragment
抱歉,这里是大菜鸟。我的应用程序中有一个设置片段,我希望其中有一个下拉菜单。但是,无论我尝试什么,下拉菜单都没有任何项目。我的代码主要基于 this。这是我的设置片段:
class SettingsFragment: Fragment(),AdapterView.OnItemSelectedListener {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentSettingsBinding.inflate(inflater)
val spinner : Spinner = binding.translationSelector
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromResource(
requireActivity(),
R.array.planets_array,
android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
spinner.adapter = adapter
}
return inflater.inflate(R.layout.fragment_settings, container, false)
}
override fun onItemSelected(arg0: AdapterView<*>, arg1: View, position: Int, id: Long) {
val toastNotice = "you selected choice # " + position
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(this.context,toastNotice,duration)
toast.show()
}
override fun onNothingSelected(arg0: AdapterView<*>) {
}
您可能会注意到我使用“requireActivity()”作为 createFromResource 的参数而不是“this”,因为“this”给出了类型不匹配...不确定我是否应该这样做,但我看到了它在计算器的某个地方。这是我的布局 xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.example.edtma.ScriptureModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SettingsFragment"
android:background="#E4E1E1">
<Spinner
android:id="@+id/translationSelector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/SpinnerLabel"
android:minHeight="48dp" />
</LinearLayout>
</layout>
当我 运行 这个时,设置片段有一个微调器的小箭头,但它没有项目。如果你好奇,这是我的 strings.xml
<resources>
<string name="app_name">edtma</string>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
如有任何帮助,我们将不胜感激。我尽可能长时间地尝试发布在此处的其他解决方案,但无法使任何工作正常进行。
heres a screenshot of my fragment with empty dropdown
为了帮助其他人,我终于找到了问题所在。我的 onCreateView 的 return 语句应该是 returning binding.root,即更改为:
return inflater.inflate(R.layout.fragment_settings, container, false)
对此:
return binding.root
抱歉,这里是大菜鸟。我的应用程序中有一个设置片段,我希望其中有一个下拉菜单。但是,无论我尝试什么,下拉菜单都没有任何项目。我的代码主要基于 this。这是我的设置片段:
class SettingsFragment: Fragment(),AdapterView.OnItemSelectedListener {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentSettingsBinding.inflate(inflater)
val spinner : Spinner = binding.translationSelector
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromResource(
requireActivity(),
R.array.planets_array,
android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
spinner.adapter = adapter
}
return inflater.inflate(R.layout.fragment_settings, container, false)
}
override fun onItemSelected(arg0: AdapterView<*>, arg1: View, position: Int, id: Long) {
val toastNotice = "you selected choice # " + position
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(this.context,toastNotice,duration)
toast.show()
}
override fun onNothingSelected(arg0: AdapterView<*>) {
}
您可能会注意到我使用“requireActivity()”作为 createFromResource 的参数而不是“this”,因为“this”给出了类型不匹配...不确定我是否应该这样做,但我看到了它在计算器的某个地方。这是我的布局 xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.example.edtma.ScriptureModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SettingsFragment"
android:background="#E4E1E1">
<Spinner
android:id="@+id/translationSelector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/SpinnerLabel"
android:minHeight="48dp" />
</LinearLayout>
</layout>
当我 运行 这个时,设置片段有一个微调器的小箭头,但它没有项目。如果你好奇,这是我的 strings.xml
<resources>
<string name="app_name">edtma</string>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
如有任何帮助,我们将不胜感激。我尽可能长时间地尝试发布在此处的其他解决方案,但无法使任何工作正常进行。 heres a screenshot of my fragment with empty dropdown
为了帮助其他人,我终于找到了问题所在。我的 onCreateView 的 return 语句应该是 returning binding.root,即更改为:
return inflater.inflate(R.layout.fragment_settings, container, false)
对此:
return binding.root