1 class implements 2 listeners - ошибка

416
21 декабря 2016, 00:32

Пишу приложение в Android Studio. Хочу в одном классе реализовать два разных слушателя.
Вот часть моего кода:

MyFragment extends Fragment implements AdapterView.OnItemSelectedListener, View.OnClickListener {
    //my fields
    private Spinner mySpinner;
    @Ovveride
    public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {
        //мой код
    }
    @Ovveride public void onNothingSelected(AdapterView<?>p){}
    @Ovveride
    public void onClick(View v) {
        //мой код
    }
    @Ovveride
    public void onCreate(Bundle b) {
        super.onCreate(b);
        //мой код
        mySpinner = (Spinner) fragmentView.findViewById(R.id.my_spinner);
        mySpinner.setOnItemSelectedListener(this);

На последней строке я получил ошибку:

'setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener)' in 'android.widget.AdapterView' cannot be applied to '(anonymous android.view.View.OnClickListener)'

Как исправить эту ошибку?
На enSO пишут, что так делать можно.

Answer 1

Если у вас myCheckBox это CheckBox то навесить action можно таким способом

myCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            // perform logic
        }
    }
});

Интерфейс AdapterView.OnItemSelectedListener относится к spinner. Метод onItemSelected отрабатывает только на нажатие на пункт в spinner

Answer 2

Я лоханулся, у меня строчка mySpinner.setOnItemSelectedListener(this); находилась в локальном классе, о чем и написано в ошибке, поэтому надо было написать MyFragment.this.

READ ALSO
LifeCycle android app

LifeCycle android app

Вроде есть два приложения с похожей архитектуройВ одном после того, как развернул приложение, появляется в логе onRestart(); onResume(); в другом нет

327
Как распарсить VkApiPoll

Как распарсить VkApiPoll

Помогите распарсить VkApiPoll

244
Метод clone() для массива

Метод clone() для массива

Как правильно написать clone(), чтобы все элементы массива также копировались?

301
Как вызвать функцию по команде?

Как вызвать функцию по команде?

Предположим, у меня есть вот такая команда:

332