ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, strings);导致出错闪退
时间: 2024-05-12 08:13:10 浏览: 95
这个错误可能是由于 `getContext()` 返回值为空所导致的。你可以尝试使用 `getActivity()` 代替 `getContext()`,即:
```
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, strings);
```
如果你的代码在 Fragment 中,建议在 `onAttach()` 方法中将 `Context` 对象保存在成员变量中,然后可以在需要使用的地方调用 `getContext()` 方法。
另外,你可以在 `simple_spinner_item` 资源文件中设置一个合适的布局,例如:
```xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="@android:color/white"/>
```
这样可以确保 Spinner 的每个条目都有一个合适的布局。
相关问题
以下代码,在选择项点击后,后面的选择框不变化,请问为什么ListView listView = view1.findViewById(android.R.id.list); ArrayAdapter<String> adapter = new ArrayAdapter<>(LuzhiAdmin_Xiangmu_Big_Add.this, android.R.layout.simple_list_item_multiple_choice, finalXx); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { // Handle item click event per_gangwei = ""; jg.add(finalXx[i]); } });
这段代码中,ListView 的 Adapter 使用的是 ArrayAdapter,该 Adapter 的布局文件是 android.R.layout.simple_list_item_multiple_choice,这个布局文件中只有一个 CheckedTextView 控件,这个控件默认是不会改变 CheckBox 状态的。
要让 CheckBox 状态随着点击改变,需要在 Adapter 中重写 getView 方法,手动设置 CheckedTextView 的状态。可以参考以下代码:
```java
ArrayAdapter<String> adapter = new ArrayAdapter<String>(LuzhiAdmin_Xiangmu_Big_Add.this, android.R.layout.simple_list_item_multiple_choice, finalXx) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
CheckedTextView checkedTextView = view.findViewById(android.R.id.text1);
checkedTextView.setChecked(listView.isItemChecked(position));
return view;
}
};
```
这样就可以根据 ListView 的状态改变 CheckBox 的状态了。
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, strings)也会闪退
这段代码闪退的原因可能是因为 `getActivity()` 返回了 null。请确保在调用 `getActivity()` 之前,Fragment 已经与 Activity 关联成功。如果 Fragment 还没有关联到 Activity,`getActivity()` 方法会返回 null,导致空指针异常。你可以尝试在调用 `getActivity()` 之前,先检查 Fragment 是否已经关联到 Activity,例如:
```
if (isAdded()) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, strings);
}
```
`isAdded()` 方法会返回 Fragment 是否已经关联到 Activity。在该方法返回 true 后,就可以安全地调用 `getActivity()` 方法了。
阅读全文