SetOnItemSelectedListener для spinner в фрагменте

У меня есть эта ошибка в setOnItemSelectedListener :

Метод setOnItemSelectedListener (AdapterView.OnItemSelectedListener) в типе AdapterView не применим для аргументов (FragmentMain) "

Класс фрагмента:

 public class FragmentMain extends Fragment { private Spinner countriesSpinner; private Activity rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){ View rootView =inflater.inflate(R.layout.activity_main, container, false); return rootView; } @Override public void onStart() { super.onStart(); addItemsOnSpinner(); } public void addItemsOnSpinner() { countriesSpinner = (Spinner) rootView.findViewById(R.id.team_list_spinner); countriesSpinner.setOnItemSelectedListener(new CustomOnItemSelectedListener ()) ; ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.team_list, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); countriesSpinner.setAdapter(adapter); countriesSpinner.setOnItemSelectedListener(this); } public class CustomOnItemSelectedListener extends Activity implements OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // TODO Auto-generated method stub if (parent.getItemAtPosition(pos).toString() .equals("San Antonio Spurs")) { Intent i = new Intent(getApplicationContext(), Spurs_games.class); startActivity(i); finish();} if (parent.getItemAtPosition(pos).toString() .equals("Los Angeles Lakers")) { Intent i = new Intent(getApplicationContext(), Lakers_games.class); startActivity(i); finish();} } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } } public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { if (parent.getItemAtPosition(pos).toString() .equals("San Antonio Spurs")) { Intent i = new Intent(getActivity(), Spurs_games.class); startActivity(i); finish();} if (parent.getItemAtPosition(pos).toString() .equals("Los Angeles Lakers")) { Intent i = new Intent(getActivity(), Lakers_games.class); startActivity(i); finish();} } private void finish() { // TODO Auto-generated method stub } public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } } 

Это мой первый пост здесь, поэтому извините / исправьте меня ПОЖАЛУЙСТА. Извините за мой английский..

 setOnItemSelectedListener 

Должен быть реализован внутри вашего FragmentMain не внутри вашей Activity если вы хотите использовать слушателя на счетчике внутри фрагмента

Внутри вашего FragmentMain onCreateView

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... } 

Поместите этот код

 countriesSpinner = (Spinner) rootView.findViewById(R.id.team_list_spinner); countriesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { } @Override public void onNothingSelected(AdapterView<?> parent) { } }); 

Проблема здесь в этой строке:

 countriesSpinner.setOnItemSelectedListener(this); 

Потому что «это» относится к фрагменту в вашем случае, но вы должны передать объект OnItemSelectedListener.

Также, похоже, существует довольно путаница в том, как работают Listeners. Вероятно, вы захотите реализовать OnItemSelectedListener в своем фрагменте, а не для создания этой функции CustomOnItemSelectedListener . Или, альтернативно, создать анонимный OnItemSelectedListener:

  countriesSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } });