我在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