Дело в том что, до этого времени, я интерфейсы реализовывал в 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?
public class BaseActivity implements OnNumberChangeCallback
Нашел ответ, напишу, может кому поможет.
Реализуем наш интерфейс в 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();
Сборка персонального компьютера от Artline: умный выбор для современных пользователей