我想从列表视图转到详细视图,因此我在我的列表中使用以下OnClickListener
:
我希望从列表视图转到详细视图,因此我在列表中使用以下OnClickListener:
@Override
public void onClick(View view)
{
Bet bet = (Bet)view.getTag();
FragmentManager fm = getActivity().getSupportFragmentManager();
BetDetailFragment f = BetDetailFragment.create(bet);
String tag = f.getClass().getName();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move));
f.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move));
}
FragmentTransaction ft = fm.beginTransaction()
.replace(R.id.frame_container, f, tag)
.addToBackStack(tag);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
L.d(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo1(bet) + "|" + view.findViewById(R.id.ivLogo1));
L.d(this, "TRANS: " + TransitionUtil.getTransitionNameBetLogo2(bet) + "|" + view.findViewById(R.id.ivLogo2));
ft.addSharedElement(view.findViewById(R.id.ivLogo1), "1");//TransitionUtil.getTransitionNameBetLogo1(bet));
ft.addSharedElement(view.findViewById(R.id.ivLogo2), "2");//TransitionUtil.getTransitionNameBetLogo2(bet));
}
ft.commit();
}
我的函数返回唯一的名称,我有两个不同的视图,但仍然不起作用。
我已经注释掉了不必要的函数,并手动编写了一些独特的事务名称... 但仍然出现了异常,在第一个 addSharedElement
行:
java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements
at android.support.v4.app.BackStackRecord.addSharedElement
编辑
如果去掉共享元素,一切都能正常工作...
transitionName
分配为与SharedElement的名称完全相等。只要视图只有一个transitionName
就足够了。实际上,*SharedElement的名称必须等于目标片段中*共享元素的transitionName
*。请参见此处。尽管这两个transitionName
可能需要相等(出于其他原因),但这不是防止需要唯一的transitionNames*错误的要求。 - Mir-Ismaili