Intereting Posts
Ошибка. Причина. Не удалось найти допустимый путь сертификации для запрошенной цели. Android-планшет или iPad для киоска При попытке найти Chromecast – MediaRouter.Callback никогда не вызывается в моем приложении для некоторых моих пользователей Размеры экрана всплеска андроида для дисплеев ldpi, mdpi, hdpi, xhdpi? – например: 1024X768 пикселей для ldpi Восстановить удаленный файл Xml из приложения в android Вызывается Camera2 API onCaptureComplete (), но состояние камеры по-прежнему CONTROL_AE_STATE_PRECAPTURE Контакт существует в контактах Биллинговый API v3 IabHelper NullPointerException Ящик навигации, обращаясь к кнопке «Назад», чтобы перейти к предыдущим фрагментам? Получить продолжительность аудиофайла Android и ActionBarCompat: как изменить видимость действий во время выполнения на устройствах до ICS? Android TextView setTextSize неправильно увеличивает размер текста Menu.findItem возвращает значение null Проблема со спецификой камеры для устройства Android Gradle: добавьте зависимость для конкретного вкуса библиотеки

Фрагментные транзакции с переходом – Требуются уникальные имена перехода

Я хочу перейти от представления списка к подробному представлению, и поэтому я использую следующий OnClickListener в своем списке:

 @Override public void onClick(View view) { Bet bet = (Bet)view.getTag(); FragmentManager fm = getActivity().getSupportFragmentManager(); BetDetailFragment f = BetDetailFragment.create(bet); String tag = f.getClass().getName(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); } FragmentTransaction ft = fm.beginTransaction() .replace(R.id.frame_container, f, tag) .addToBackStack(tag); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo1(bet) + "|" + view.findViewById(R.id.ivLogo1)); Ld(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo2(bet) + "|" + view.findViewById(R.id.ivLogo2)); ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1");//TransitionUtil.getTransitionNameBetLogo1(bet)); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2");//TransitionUtil.getTransitionNameBetLogo2(bet)); } ft.commit(); } 

Мои функции возвращают уникальные имена, у меня два разных вида, но все равно это не работает. Я уже прокомментировал ненужные функции и написал там уникальные имена транзакций … Но все же я получаю это исключение в строке первого addSharedElement :

 java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements at android.support.v4.app.BackStackRecord.addSharedElement 

РЕДАКТИРОВАТЬ

Без общих элементов все работает отлично …

Solutions Collecting From Web of "Фрагментные транзакции с переходом – Требуются уникальные имена перехода"

Проблема заключается в том, что addSharedElement НЕ устанавливает имя транзакции для представления!

Поэтому в моем примере мне пришлось бы установить его с помощью следующего кода:

 ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo1), "1"); ViewCompat.setTransitionName(view.findViewById(R.id.ivLogo2), "2"); 

Перед добавлением этих представлений в FragmentTransaction

Впоследствии следующие работы просто прекрасны и как ожидалось:

 ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1"); ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2"); 

Если ваш onClickListener является частью вашего фрагмента, а не родительской, то вы делаете что-то неправильно здесь. Ваш фрагмент должен уведомлять родительскую активность о том, чего она хочет, и активировать ее (например, путем замены фрагментов и т. Д.). Фрагмент никогда не должен делать это сам по себе. Кроме того, если вам нужно только перейти от подробного представления к списку, я предполагаю, что вы ввели свой подробный вид из этого списка. Если это так, все, что вам нужно, – вырезать последний элемент (фрагмент фрагмента) из стека. См. https://developer.android.com/reference/android/app/FragmentManager.html.