Я честно искал много мест, прежде чем опубликовать этот вопрос здесь, потому что я был предметом вопроса о запрете переполнения стека. Я боялся, если я напишу плохой вопрос, меня снова забанят. Но я даже нигде не нашел упоминания об этом типе вопроса.
У меня есть ListView, который выглядит следующим образом.
Этот ListView, который использует FirebaseListAdapter, находится во фрагменте (HomeFragment) внутри MainActivity.
При нажатии на любую из тем открывается другая операция, которая показывает резюме посещаемости этого конкретного субъекта. Например, при нажатии на CA,
Теперь я хотел, чтобы для этого была общая анимация, которая делится именами субъекта в обоих действиях. Или совместное использование элемента ListView в первом упражнении и всего макета ограничения во втором упражнении.
Я использовал код
listofsubs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, final View view, int i, long l) {
Intent intent = new Intent(getActivity(),SubjectActivity.class);
TextView sub_name_view = view.findViewById(R.id.subject_name_field);
intent.putExtra("SUBJECT",sub_name_view.getText().toString());
TextView nameView = view.findViewById(R.id.subject_name_field);
TextView percentView = view.findViewById(R.id.present_attendance_field);
TextView commentView = view.findViewById(R.id.comment);
Pair[] pairs = {
new Pair(view,"sharedCard"),
new Pair(nameView,"sharedName"),
new Pair(percentView,"sharedPercent"),
new Pair(commentView,"sharedComment"),
};
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(getActivity(),pairs);
startActivity(intent,options.toBundle());
}
});
Теперь он переходит от первого действия ко второму штрафу. Но при возврате он возвращается в случайные места, а не в позицию элемента списка. Посмотрите это видео .
Теперь я понимаю, что ListView не загружается к моменту анимации, поэтому он не может go в нужном месте. Но что делать? Я пробовал postponeEnterTransition();
в onCreateView
HomeFragment, но не знаю, куда поместить startPostponedEnterTransition()
. Я попробовал это
listofsubs.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
startPostponedEnterTransition();
}
});
без удачи. Там нет абсолютно ничего о FireBase и анимации в любом месте на Inte rnet. Понятия не имею, как действовать дальше.
Поэтому я решил сдаться и потерять общую анимацию по возвращении и регулярно выходить с разнесением. Но это тоже не работает. Когда я finsh()
вместо finishAfterTransition()
, очевидно, у меня не может быть никакого перехода.
Затем я решаю снова сдаться и go для взрыва как внутри, так и снаружи. Я полностью отказался от общего перехода. Код ниже вызывается в onCreate
второй (суммарной) активности.
private void setTransitions() {
Explode explode = new Explode();
explode.setDuration(1000);
getWindow().setEnterTransition(explode);
getWindow().setExitTransition(explode);
}
Тогда, к моему ужасу, взрыв не работает, как взрыв. Это больше похоже на слайд (я имею в виду, я знаю, что это не слайд, потому что AppBar идет вверх). Пожалуйста, посмотрите это видео , чтобы увидеть, как работает Explode.
Итак, что нужно сделать
- Что нужно сделать, чтобы получить общий переход с помощью poper для просмотра списков с помощью FireBaseListAdapter?
- Можно ли использовать общую анимацию для входа и обычный взрыв для выхода?
- Почему мой взрыв выглядит как слайд? Я знаю, что дефолтный взрыв должен обычно взрываться в радиальном направлении от центра (как правило, в трех направлениях в соответствии с учебниками)