与RecyclerView共享的元素过渡到片段

时间:2019-02-22 07:27:57

标签: java android android-fragments android-viewpager shared-element-transition

我在RecyclerView的{​​{1}}内有一个Fragment。我希望在单击ViewPager中的某个项目时将Transition设置为第二个Fragment。我觉得我已经从其他类似的问题中耗尽了资源,并尝试了无济于事的解决方案。

我只需运行任何其他转换就没有问题; ViewPager似乎无法使我工作。任何帮助将不胜感激。

我在SharedElementTransition方法中设置了每个单独项目的TransitionName,并在目标onBindViewHolder的{​​{1}}中调用postponeEnterTransition,直到所有{{ 1}}已创建。每当我点击onCreate中的项目时,我似乎都会完全跳过动画,直接跳到最后的Fragment

我的Views

RecyclerView

包含View的片段:

RecyclerAdapter

我的目标@Override public void onBindViewHolder(@NonNull final GroupRecyclerAdapter.GroupViewHolder viewHolder, int position) { if(groupsList !=null){ final GroupBase currentGroup = groupsList.get(position); ViewCompat.setTransitionName(viewHolder.nameTxt,"transition"+position); viewHolder.nameTxt.setText(currentGroup.getName()); //viewHolder.nameTxt.setTransitionName("Transition"+position); Log.i(TAG,"New ViewHolder with TransitionName: "+ viewHolder.nameTxt.getTransitionName()); viewHolder.descTxt.setText(currentGroup.getDescription()); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { groupClickListener.onGroupClick(viewHolder.getAdapterPosition(), currentGroup, viewHolder.nameTxt); } }); } }

RecyclerView

我的所有视图都没有在.xml文件中设置@Override public void onGroupClick(int position, GroupBase groupBase, View sharedView) { Log.i(TAG,"Clicked on a Group View with TransitionName: "+sharedView.getTransitionName()); Fragment detailedGroup = Detailed_Group_Fragment.newInstance(groupBase, sharedView.getTransitionName()); detailedGroup.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move)); //detailedGroup.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade)); Log.i(TAG,"TRANSITION NAME OF Recycler TextView : "+ sharedView.getTransitionName()); getFragmentManager() .beginTransaction() .addSharedElement(sharedView, "transition") .replace(R.id.core_frame,detailedGroup) .addToBackStack(null) .commit(); } ,并且所有显示都按预期方式显示。

编辑

根据进一步的调查,当我尝试执行Fragment以从@Nullable @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); postponeEnterTransition(); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final GroupBase groupBase = getArguments().getParcelable(GROUP_BASE); String transitionName = getArguments().getString(TRANSITION_NAME); Log.i(TAG,"TransitionName variable in detail is: "+transitionName); TextView name = view.findViewById(R.id.detail_group_name_txt); name.setText(groupBase.getName()); //name.setTransitionName(transitionName); ViewCompat.setTransitionName(name,"transition"); startPostponedEnterTransition(); } 内加载新的TransitionName时,似乎出现了问题。根据{{​​3}}的建议,在我的FragmentTransactions主持人Fragment中,我致电ViewPager,并实现了一个ViewPager,当我的目标{{1} }视图已创建。但是,从Activity postponeEnterTransition()过渡到目标interface时,行为没有变化。

主机Fragment

ViewPager

我的修订目标Fragment

Fragment

0 个答案:

没有答案