В AppCompatActivity
с RecyclerView
во фрагменте (myFragment1
), viewholders
и т. Д., Поэтому, если я нажму на элемент, то myFragment2
отобразит и отобразит детали элемента , На этом этапе я хочу создать анимацию между двумя фрагментами с общими элементами.
Шаги для воспроизведения поведения:
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
[...]
public class AppActivity extends AppCompatActivity
myFragment1.setSharedElementReturnTransition(new MyNewTransition());
myFragment1.setSharedElementEnterTransition(new MyNewTransition());
[...]
a) getSupportFragmentManager().beginTransaction()
.addSharedElement(myImage, "mytransition")
.replace(R.id.recycler_view_container, myFragment2)
.commit();
b) getSupportFragmentManager().beginTransaction()
.addSharedElement(myImage, "mytransition")
.add(R.id.recycler_view_container, myFragment2)
.hide(myFragment1)
commit();
В (a) коде изображение правильно передается, и анимация происходит идеально между общими элементами, но мне это не нужно.
В коде (b) единственное отличие состоит в том, что myFragment1
скрыт и добавлен myFragment2
, в этом случае и ввод, и возврат возвращаются, и анимация не происходит.
Мне нужен код (b), потому что «замена» фрагментов разрушит myFragment1
, а его восстановление - это процесс с большой нагрузкой.
Я думаю, что это ошибка с библиотеками androidx
EDIT:
Я построил образец, основанный на демонстрации Брайана Хербста:
FragmentTransitionSample и повторно адаптирован для androidx, здесь являются источниками.