Мне нужна помощь по фрагментации фрагментов. Я не понимаю, как это сделать правильно, так как есть небольшая документация, которую я могу найти.Нужна помощь по общему элементу Переходы фрагментов
У меня есть 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: с таким же кодом я перешел на способ перехода на активность. Это работает безупречно. Я думаю, что они могут вызвать переход фрагментации, возможно, неправильно. Ваши взгляды оценены.