Ошибка "BaseActivity cannot be cast to Interface

338
10 августа 2017, 21:58

Дело в том что, до этого времени, я интерфейсы реализовывал в Activity, значения методов задавал во Fragment. То есть, в onAttach() инициализировал, а потом где нужно вызвать метод интерфейса вызывал. Пример:

interface OnNumberChangeCallback{
    void onSuccess();
}

И Во Fragment:

OnNumberChangeCallback onNumberChangeCallback;
onAttach(Context context){
    onNumberChangeCallback = (OnNumberChangeCallback) context;
}

и т.д.

Дело в том, что я хочу инициализировать интерфейс в BaseActivity, и вызвать его метод. А во Fragment реализовать этот интерфейс.

Когда пытаюсь инициализировать в onCreate методе таким образом:

onNumberChangeCallback = (OnNumberChangeCallback) this;

то получаю ошибку:

BaseActivity cannot be cast to OnNumberChangeCallback

Вопрос: Как правильно инициализировать интерфейс в Activity?

Answer 1
public class BaseActivity implements OnNumberChangeCallback
Answer 2

Нашел ответ, напишу, может кому поможет.

Реализуем наш интерфейс в MyFragment

public class MyFragment extends Fragment implements OnNumberChangeCallback {
    @Override
    public void onSuccess() {
        // TODO
    }
}

И в Activity инициализируем, переопределив onAttachFragment(Fragment fragment);

public class MyActivity extends AppCompatActivity {
    private OnNumberChangeCallback callback;
    @Override
    public void onAttachFragment(Fragment fragment) {
        super.onAttachFragment(fragment);
        if (fragment instanceof OnNumberChangeCallback) {
            callback = (OnNumberChangeCallback) fragment;
        }
    }
}

И дальше, вызываем метод callback.onSuccess();

READ ALSO
“Философия java” [требует правки]

“Философия java” [требует правки]

В книге "Философия java" Брюса Эккеля, в теме "Интерфейсы как средство адаптации" есть пример с паттерном "адаптер" для генерации вещественных...

311
Вызывается неправильный метод

Вызывается неправильный метод

В приложении на Android когда в фрагменте JournalFragment вызываешь контекстное меню у ListView lvJournal и выбераешь пункт Return преложение вызывает метод из фрагмента...

481
Запуск скрипта при выполнении условий [требует правки]

Запуск скрипта при выполнении условий [требует правки]

Как сделать, чтобы, если в поле на html страничке ввели правильный текст и нажали кнопку, то запускается скрипт? Хелп >~<

328
Ошибка валидатора &#171;The frameborder attribute on the iframe element is obsolete. Use CSS instead&#187;

Ошибка валидатора «The frameborder attribute on the iframe element is obsolete. Use CSS instead»

Есть сайт на wordpress, в котором установлена контактная форма contact form 7 с модулем внутри папки recaptchaphp, где есть такой код:

490