Android共享元素片段转换:返回转换不工作

Android共享元素片段转换:返回转换不工作,android,android-fragments,shared-element-transition,Android,Android Fragments,Shared Element Transition,在我的项目中,我使用RecyclerView来显示带有缩略图的项目列表。当用户单击某个项目时,将打开DetailView,其中图像显示在顶部。我试图在这些片段之间共享一些元素,但是转换仅在输入细节片段时有效,而在从细节片段返回时无效。 在我的ListAdapter中,我设置了TransitionName,并在用户单击某个项目时通知ListFragment: @Override public void onBindViewHolder(RecyclerView.ViewHolder holder,

在我的项目中,我使用
RecyclerView
来显示带有缩略图的项目列表。当用户单击某个项目时,将打开DetailView,其中图像显示在顶部。我试图在这些片段之间共享一些元素,但是转换仅在输入细节片段时有效,而在从细节片段返回时无效。

在我的
ListAdapter
中,我设置了
TransitionName
,并在用户单击某个项目时通知ListFragment:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        viewHolder.image.setTag(Constants.SHARED_NAME_IMAGE + item.itemId);
}
单击事件:

@OnClick(R.id.root)
 public void onClickedItem() {
        List<Pair<View, String>> sharedElements = new ArrayList<>();
        sharedElements.add(new Pair<View, String>(image, (String) image.getTag()));
        interactionListener.onItemSelected(data.get(getAdapterPosition() - headerItemCount).type, data.get(getAdapterPosition() - headerItemCount).itemId, sharedElements);
 }

我刚刚解决了这个问题:有两个问题:

  • 我已覆盖我的列表适配器(因此转换名称已被删除)
  • 我没有在
    onBindViewHolder
  • 为了解决#1,我更改了
    setUpList(){…}
    如下(第一个if很重要!):

    为了解决#2问题,我刚刚将
    setTag(..)
    替换为
    setTransitionName(..)

    在我的onClick方法中:

     List<Pair<View, String>> sharedElements = new ArrayList<>();
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                sharedElements.add(new Pair<View, String>(image, image.getTransitionName()));
            }
     interactionListener.onItemSelected(data.get(getAdapterPosition() - headerItemCount).type, data.get(getAdapterPosition() - headerItemCount).itemId, sharedElements);
    
    List sharedElements=new ArrayList();
    if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
    添加(新对(image,image.getTransitionName());
    }
    interactionListener.onItemSelected(data.get(getAdapterPosition()-headerItemCount)。type,data.get(getAdapterPosition()-headerItemCount)。itemId,sharedElements);
    
    ViewCompat.setTransitionName(header, Constants.SHARED_NAME_IMAGE + itemId);
    
     private void setupList() {
        if (adapter != null) {
            list.setAdapter(adapter);
            linearLayoutManager = new LinearLayoutManager(getActivity());
            list.setLayoutManager(linearLayoutManager);
            setScrollListener();
            return;
        }
    
        refreshLayout.setColorSchemeColors(ResourcesCompat.getColor(getResources(), R.color.main_color_2, getActivity().getTheme()));
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadList(true);
            }
        });
    
        adapter = new ListAdapter((int) (DisplayUtils.getWidth(getActivity()) * 0.6), this);
        list.setAdapter(adapter);
    
        linearLayoutManager = new LinearLayoutManager(getActivity());
        list.setLayoutManager(linearLayoutManager);
    
        refreshLayout.post(new Runnable() {
            @Override
            public void run() {
                refreshLayout.setRefreshing(true);
                loadFilterItems();
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    vh.image.setTransitionName(Constants.SHARED_NAME_IMAGE + item.itemId);
                }
    
     List<Pair<View, String>> sharedElements = new ArrayList<>();
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                sharedElements.add(new Pair<View, String>(image, image.getTransitionName()));
            }
     interactionListener.onItemSelected(data.get(getAdapterPosition() - headerItemCount).type, data.get(getAdapterPosition() - headerItemCount).itemId, sharedElements);