如何解决如何在片段布局中创建微调器?
我正在按照 Google 的 spinner example 在 Spinner
中创建一个简单的 Fragment
。这是我到目前为止所做的:
fragment_home.xml
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
app:layout_constraintEnd_toEndOf="@+id/textView5"
app:layout_constraintStart_toStartOf="@+id/textView5"
app:layout_constraintTop_toBottomOf="@+id/textView5" />
HomeFragment.java
public View onCreateView(@NonNull LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
...
Spinner spinner = (Spinner) getView().findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),R.array.spinner_options,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
strings.xml
<resources>
...
<string-array name="spinner_options">
<item>Round-robin</item>
<item>Double round-robin</item>
<item>Swiss</item>
<item>Knockout</item>
<item>Team round-robin</item>
<item>Team Swiss</item>
<item>Team knockout</item>
<item>Match</item>
</string-array>
</resources>
当我尝试构建应用程序时,出现错误:
error: incompatible types: HomeFragment cannot be converted to Context
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this
^
我在 this post 中读到我必须将 Activity 作为第一个参数而不是片段传递,所以我尝试将 this
替换为 getActivity()
,然后替换为 this.getActivity()
.在这两种情况下,应用都成功构建但未运行。
我在这里做错了什么吗?有人能指出我的错误吗?
解决方法
您不应该在 getView()
中使用 onCreateView
,因为尚未创建片段视图。因为实际上 onCreateView
返回其要创建的视图。
所以,下面这行代码会导致 NPE
Spinner spinner = (Spinner) getView().findViewById(R.id.spinner);
如果你想在 onCreateView
中设置微调器,那么你需要先用
View view = inflater.inflate(R.layout.my_fragment_layout,container,false);
Spinner spinner = view.findViewById(R.id.spinner);
您可以将 getView()
用于 onCreateView
之后的任何片段生命周期方法,例如 onViewCreated
、onStart
或 onResume
然后正如您所提到的,使用 getActivity()
或 requireActivity()
来构建适配器
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(requireActivity(),R.array.spinner_options,android.R.layout.simple_spinner_item);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。