【发布时间】:2021-01-01 18:54:04
【问题描述】:
我正在关注 Google 的 spinner example 在 Fragment 中创建一个简单的 Spinner。这是我到目前为止所做的:
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 作为第一个参数而不是片段传递,所以我尝试用getActivity() 替换this,然后用this.getActivity() 替换。在这两种情况下,应用程序都成功构建但没有运行。
我在这里做错了吗?谁能指出我的错误?
【问题讨论】:
-
does not run?表示有崩溃报告?还是不符合您的期望? -
应用程序根本没有运行。
-
所以肯定有崩溃报告什么的..我们可以看看它
-
这里是:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference. -
这和
getView().findViewById(R.id.spinner)有关系吗?谷歌的例子是关于在一个活动中创建一个微调器,所以他们没有使用getView()。
标签: android android-fragments android-spinner