Это фрагмент, с которым вы имеете дело, а не деятельность.Fragment
не расширяет Context
или View
классы и не имеет этого findViewById
метода.
Что вам нужно сделать, это переместить ваш код с onCreateView
на onViewCreated
, который получаетссылка на корневой вид в качестве параметра.Затем используйте тот же метод, но с этим видом, как показано ниже:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
Spinner spinner = view.findViewById(R.id.spinner1);
...
}
Другая вещь, которую вы можете сделать, это заменить:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag2_layout, container, false);
Spinner spinner = findViewById (R.id.spinner1);
// I'm not sure how you didn't see all errors when writing code after a return statement.
...
}
на:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag2_layout, container, false);
Spinner spinner = view.findViewById(R.id.spinner1);
...
return view; // after finishing all logic.
}
ОБНОВЛЕНИЕ:
Не видел, что есть такжепроблема с ArrayAdapter
.Как уже упоминалось в ответе Csongi77 , необходимо правильно создать экземпляр адаптера.Опять же, фрагмент не может использоваться в качестве контекста, вы должны использовать содержащее действие для этого:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.insulin, android.R.layout.simple_spinner_item);
ArrayAdapter.createFromResource
создает и возвращает новый адаптер, и в настоящее время вы просто немедленно утилизируете его, не сохраняя его ссылку.