Intereting Posts
Почему Android ограничивает допустимые типы файлов так строго при приеме через Bluetooth OPP? Как перейти к активности USB-хранилища Android Android? Вложение ZXing в приложение для Android Grep adb logcat и записать вывод в текстовый файл Android: Как тестовые платформы A / B модифицируют активы «на лету»? GetSize () не поддерживается на старых версиях ОС Android, getWidth () / getHeight () устарел Android-приложение вылетает с NullPointerException в ChoreoGrapher Переключение между фрагментами с помощью функции OnNavigationItemSelected в новом шаблоне активности навигационного ящика (Android Studio 1.4) Приложение Android требует больших файлов данных Разработка двух приложений для Android и связь между двумя Как имитировать поведение 3-х фазовых карт Google Maps? Как удалить клавиатуру после завершения операции? Обновить галерею после удаления файла изображения? Передача ArrayList объектов через намерение – Java (Android) Обнаружение лица не работает для передней камеры

Возвратный переход не работает корректно при использовании общих разделов фрагментов

У меня есть 2 фрагмента ListMovieFragment и DetailMovieFragment .

У меня есть интерфейс в ListMovieFragment который реализован в MainActivity . Я использую общий переход элемента; Когда я нажимаю на изображение в ListMovieFragment onMovieSelected вызывается в MainActivity .

Переход из работы ListMovieFragment .
Но когда я нажимаю кнопку « Назад» , переход из DetailMovieFragment в ListMovieFragment не работает.

Gif, что происходит неправильно

Здесь MainActivity. Я думаю, что у меня есть неправильная комбинация для настройки переходов на фрагменты.

 public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null) { ListMovieFragment listMovieFragment = new ListMovieFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.activity_main, listMovieFragment, ListMovieFragment.TAG); fragmentTransaction.commit(); } } @Override public void onMovieSelected(int movieId) { DetailMovieFragment detailMovieFragment = (DetailMovieFragment)getSupportFragmentManager().findFragmentByTag(DetailMovieFragment.TAG); /* Create a new DetailMovieFragment if not exits */ if(detailMovieFragment == null) { detailMovieFragment = new DetailMovieFragment(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { /* Get the fragments that will be using the transition */ ListMovieFragment listMovieFragment = (ListMovieFragment)getSupportFragmentManager().findFragmentByTag(ListMovieFragment.TAG); if(listMovieFragment == null) { listMovieFragment = new ListMovieFragment(); } /* Inflate the transition */ Transition changeTransition = TransitionInflater .from(MainActivity.this) .inflateTransition(R.transition.change_image_transform); /* source fragment (ListMovieFragment) */ listMovieFragment.setExitTransition(new Explode()); listMovieFragment.setSharedElementReturnTransition(changeTransition); /* Destination fragment (DetailMovieFragment) */ detailMovieFragment.setSharedElementEnterTransition(changeTransition); detailMovieFragment.setEnterTransition(new Explode()); /* Get the shared imageview from the source fragment (MovieListFragment) */ final ImageView ivSharedImage = (ImageView) findViewById(R.id.ivMoviePoster); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, detailMovieFragment, DetailMovieFragment.TAG); fragmentTransaction.addToBackStack(DetailMovieFragment.TAG); fragmentTransaction.addSharedElement(ivSharedImage, getResources().getString(R.string.transition_poster_image)); fragmentTransaction.commit(); } else { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, detailMovieFragment, DetailMovieFragment.TAG); fragmentTransaction.addToBackStack(DetailMovieFragment.TAG); fragmentTransaction.commit(); } } @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); } else { super.onBackPressed(); } } } 

Мой файл перехода xml:

 <transitionSet> <changeBounds /> </transitionSet> 

fragment_list

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="18dp" android:paddingBottom="6dp"> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="184dp" android:layout_height="276dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:transitionName="@string/transition_poster_image"/> </LinearLayout> 

fragment_detail

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.androidbox.fragmenttransitions.detail.DetailMovieFragment"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="The Movie App" android:textSize="28sp" android:fontFamily="sans-serif-light" android:textColor="@android:color/holo_blue_dark"/> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="92dp" android:layout_height="138dp" android:layout_marginEnd="16dp" android:layout_marginTop="112dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:layout_gravity="end" android:transitionName="@string/transition_poster_image"/> </FrameLayout> 

activity_main

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.androidbox.fragmenttransitions.activity.MainActivity"> </FrameLayout> 

Solutions Collecting From Web of "Возвратный переход не работает корректно при использовании общих разделов фрагментов"

Вы должны изменить android:layout_width/height fragment_list.xml как android:layout_width/height ниже, свойства android:layout_width/height изменены.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="18dp" android:paddingBottom="6dp"> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="184dp" android:layout_height="276dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:transitionName="@string/transition_poster_image"/> </LinearLayout>