Поскольку фрагменты должны выдерживать изменение конфигурации, Android настоятельно рекомендует при создании фрагмента реализовать собственный метод newInstance()
, передавая необходимые данные в Bundle
вместо использования new MyFragment()
.
.
Теперь проблема в том, Я хочу передать обратный вызов (интерфейс) этому фрагменту .
Сначала я попытался сделать свой интерфейс extends Serializable
, и просто использовал args.putSerializable("myInterface", myInterface)
.
Но когда Android пытается сохранить свое состояние (посылать его), создается исключение (Parcelable обнаружил IOException, записывая сериализуемый объект).
Я знаю, что официальный способ сделать это состоит в том, чтобы вызывающий объект Activity реализовывал обратный вызов и связывал обратный вызов с действием во время onAttach()
фрагмента.
Да, это работает, но это кажется странным, потому что я на самом деле создаю библиотеку, и теперь вместо того, чтобы просить пользователя передать обратный вызов сборщику, я должен сказать им, что ваша активность вызывающей стороны должна реализовывать определенный интерфейс.
Что еще более важно, что, если я хочу показать это Fragment
от другого Fragment
? onAttach()
всегда присоединяется к Activity
.
Итак, есть ли способ, с помощью которого я могу позволить пользователю передать обратный вызов фрагменту и иметь возможность пережить изменение конфигурации (например, ротацию устройства)?
UPDATE
По запросу, вот интерфейс, который я хочу передать:
public interface OnImageSelectedListener extends Serializable {
void onImageSelected (String uri);
}
И как я строю этот интерфейс:
new OnImageSelectedListener() {
@Override
public void onSingleImageSelected(String uri) {
Glide.with(MainActivity.this).load(uri).into(ivImage);
}
}