1

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

У меня есть GridView с плакатами с фильмами. Когда щелкнут один плакат, он переместится к следующему фрагменту. Плакат - это общий элемент, он изменит размер (увеличится) и накроет экран. Другие элементы будут исчезать как на переход содержимого. Это работает правильно.

Невозможно получить переход с повторным входом. Если нажать кнопку возврата, первый элемент в представлении «Сетка» всегда будет присутствовать первым (он не следует за преобразованием содержимого (fade)), затем другие элементы исчезают в . Общий элемент не изменяет размер (уменьшаться) и присоединяется к другим элементам. Он сглаживается вместе с другими элементами, таким образом, следуя стилю перехода контента. Вот мой код:

NowShowingFragment.java содержит GridView с изображениями

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
    setHasOptionsMenu(true); 
    Transition shared = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade); 
    shared.setDuration(2000); 
    setExitTransition(shared); 
} 

В моей OnCreateView-я использую Пикассо загружать изображения из web.So я первый добывающие растрового изображения из ImageView и передавая его в Activity, который, в свою очередь, перейдет к следующему фрагменту для отображения. (Не знаю, так ли это должно быть сделано).

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      imageView = (ImageView) view.findViewById(R.id.gridImage); 
      Drawable drawable = imageView.getDrawable(); 

      if (drawable instanceof BitmapDrawable) { 
       bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
      } else { 
       return; 
      } 
      imageView.setTransitionName("Poster" + position); 
      mCallback.onArticleSelected(bmp, "Poster" + position, imageView); 
     } 
    }); 

MainActivity

@Override 
public void onArticleSelected(Bitmap bmp, String name, ImageView image) { 

    NowShowingDetail newFragment = new NowShowingDetail(); 

    Transition shared=TransitionInflater.from(this).inflateTransition(android.R.transition.move); 
    shared.setDuration(2000); 
    Bundle args = new Bundle(); 
    args.putParcelable("Bitmap", bmp); 
    args.putString("TransitionName", name); 
    newFragment.setArguments(args); 
    newFragment.setEnterTransition(shared); 
    newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform)); 

    getSupportFragmentManager().beginTransaction().replace(R.id.now_showing_fragment, newFragment).addToBackStack(null).addSharedElement(image, image.getTransitionName()).commit(); 

} 

В NowShowingDetail-Это новый фрагмент, который заменит старый one.It будет просто отобразить полный экран общий элемент.

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.testlayout, container, false); 
    ImageView imageView = (ImageView) rootView.findViewById(R.id.gridImage); 

    Bundle arguments = getArguments(); 
    if (arguments != null) { 
     Bitmap bitmap = arguments.getParcelable("Bitmap"); 
     imageView.setImageBitmap(bitmap); 
     imageView.setTransitionName(arguments.getString("TransitionName")); 

    } 
    return rootView; 
} 

change_image_transorm.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> 
<changeImageTransform 
    android:duration="2000"></changeImageTransform> 
<changeBounds 
    android:duration="2000"></changeBounds> 
<changeTransform 
    android:duration="2000"></changeTransform> 


Спасибо заранее.

EDIT: с таким же кодом я перешел на способ перехода на активность. Это работает безупречно. Я думаю, что они могут вызвать переход фрагментации, возможно, неправильно. Ваши взгляды оценены.

ответ

0

Я заметил, что для фрагментов не существует Shared Element Exit и Re-enter переходов.

Цитируя @George горы поста:

Все этих переходов одинаковы в Fragment Transitions кроме того, что нет разделяемого выхода элемента и общие возвратный элемента переходов. Переходы фрагментов работают с использованием FragmentTransaction. Вы удаляете фрагмент, затем добавляете фрагмент, и активируются переходы. Если вы удалите фрагмент, вам будет трудно сделать некоторые манипуляции на нем, как в режиме Activity Transition. Вместо этого вам придется делать свои манипуляции, прежде чем запускать FragmentTransaction.

из https://halfthought.wordpress.com/2014/12/08/what-are-all-these-dang-transitions/

Так я думаю Фрагментные переходы только один way.if, что это так, то поведение, как и ожидалось.

Сохраните это как принято, пока кто-либо еще не даст лучшего объяснения.