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
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);