Первый bundle пуст
Передаю данные из фрагмента в фрагмент.
Navigation.findNavController(v).navigate(R.id.bookFragment);
Fragment fragment = new BookFragment();
FragmentTransaction ft = fm.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("target", book.getLink());
bundle.putString("image", book.getImage());
fragment.setArguments(bundle);
Log.i("CUSTOM ADAPTER", "SET BUNDLE");
ft.replace(R.id.nav_host_fragment, fragment).commit();
Получаю в методе OnCreate
Bundle bundle = this.getArguments();
Log.i("CUSTOM ADAPTER", "GET BUNDLE: " + bundle);
Вот лог
2020-06-15 03:34:55.213 1407-1407/com.d.b I/CUSTOM ADAPTER: SET BUNDLE
2020-06-15 03:34:55.271 1407-1407/com.d.b I/CUSTOM ADAPTER: GET BUNDLE: null
2020-06-15 03:34:55.361 1407-1407/com.d.b I/CUSTOM ADAPTER: GET BUNDLE: Bundle[{target=/book/14470, image=/i/book/19/12/16134.jpg}]
Как понятно из вопроса, у меня первый bundle почему-то пустой. Как это исправить? Для дальнейшей работы с переменными мне нужны значения, иначе постоянно будет вылетать exception.
Ответы (1 шт):
Автор решения: IR42
→ Ссылка
Navigation Component сам создаёт фрагмент и управляет транзакциями. Так что у вас сначала происходит переход на фрагмент без аргументов через Navigation Component, а потом вы его вручную зачем то заменяете на новый.
Всё что нужно сделать, это передать аргументы при навигации и избавиться от лишнего кода
Bundle bundle = new Bundle();
bundle.putString("target", book.getLink());
bundle.putString("image", book.getImage());
// Log.i("CUSTOM ADAPTER", "SET BUNDLE");
Navigation.findNavController(v).navigate(R.id.bookFragment, bundle);