я использовал это руководство, чтобы сделать простой RecyclerView (в фрагменте) to Activity Shared Element Transition с несколькими элементами, и все это отлично работало до того момента, когда я пытаюсь вернуться. Хотя я передаю ViewHolder, как показано ниже, иногда анимация возврата заканчивается на другом элементе RecyclerView, что действительно плохо.
public void onPetClicked(PetRecyclerViewAdapter.PetViewHolder holder, int position) {
Intent newPostIntent = new Intent(getActivity(), PostDetailsActivity.class);
newPostIntent.putExtra("TYPE", mPostType);
newPostIntent.putExtra("POSTED_PET", mPetList.get(position));
Pair<View, String> area = Pair.create(holder.itemView.findViewById(R.id.removable), "content_area");
Pair<View, String> p1 = Pair.create(holder.itemView.findViewById(R.id.ivPetImage), "petImage");
Pair<View, String> p2 = Pair.create(holder.itemView.findViewById(R.id.tvTitle), "postTitle");
Pair<View, String> p3 = Pair.create(holder.itemView.findViewById(R.id.tvInfo), "postDescription");
Pair<View, String> p4 = Pair.create(holder.itemView.findViewById(R.id.rlDate), "postDate");
Pair<View, String> p5 = Pair.create(holder.itemView.findViewById(R.id.rlLocation), "postLocation");
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(getActivity(), area, p1, p2, p3, p4,p5);
getActivity().startActivity(newPostIntent, options.toBundle());
Не имея возможности исправить это, я решил фактически не использовать анимацию возврата, поэтому во втором упражнении я заменил
@Override
public void onBackPressed(){
super.onBackPressed();
supportFinishAfterTransition();
}
с участием
@Override
public void onBackPressed(){
super.onBackPressed();
finish();
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
}
но теперь, когда я возвращаюсь, все общие элементы пусты!
Итак, я пытаюсь придумать способ: либо заставить возвратный переход работать должным образом, то есть «затухающие» эффекты исчезают на правильном элементе, ИЛИ удалить возвратный переход все вместе.
Изменить: чтобы заставить его работать, я попытался получить и использовать View, который был нажат, вместо ViewHolder, но опять же, я получил те же результаты. Как только я прокручивал представление ресайклера и открывал элемент, представления возвращались к строке, отличной от той, которую они начали.
public void onPetClicked(View view, PetRecyclerViewAdapter.PetViewHolder holder, int position) {
mPetList.get(position);
Intent newPostIntent = new Intent(getActivity(), PostDetailsActivity.class);
newPostIntent.putExtra("TYPE", mPostType);
newPostIntent.putExtra("POSTED_PET", mPetList.get(position));
Pair<View, String> area = Pair.create(view.findViewById(R.id.removable), "content_area");
Pair<View, String> p1 = Pair.create(view.findViewById(R.id.ivPetImage), "petImage");
Pair<View, String> p2 = Pair.create(view.findViewById(R.id.tvTitle), "postTitle");
Pair<View, String> p3 = Pair.create(view.findViewById(R.id.tvInfo), "postDescription");
Pair<View, String> p4 = Pair.create(view.findViewById(R.id.rlDate), "postDate");
Pair<View, String> p5 = Pair.create(view.findViewById(R.id.rlLocation), "postLocation");
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(getActivity(), area, p1, p2, p3, p4,p5);
getActivity().startActivity(newPostIntent, options.toBundle());
}
});