我有一个RecyclerView
与填充项目(ImageView
,2 x TextView
)。在项目点击我开始一个新的Activity
。我想使用材质转换,我想重新安排ImageView
。Recycler项目材料转换不能正常工作
两个ImageViews
共享相同的转换名称。
问题:当我按项目,动漫作品和新的活动开始过渡,但如果我点击哪个低于第一个项目项目, 过渡将仍然启动并在第一端行。
@Override
public void openUserDetails(UiBaseUser data, View view, int position) {
iwAvatar = ButterKnife.findById(this, R.id.iw_avatar);
Pair<View, String> p1 = Pair.create(iwAvatar, "avatar");
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
.makeSceneTransitionAnimation(this, p1);
startActivity(UserDetailActivity.getIntent(getApplicationContext(), data), optionsCompat.toBundle());
}
上述代码在执行SourceActivity
并且不具有直接链接到item_list
XML
布局。这就是为什么我在那里使用Butterknife
,找到我想要动画的ImageView
- 但是,这似乎只抓取了第一个元素ImageView
而不是实际按下的ImageView
。
这是我的adapter class
(我假设我在这里失去了一些东西)。在这个ViewHolder类中,我引用了ImageView
所在的布局UserListLayout
(item_list
)。
public class UsersAdapter extends BaseAdapter<UiBaseUser, UsersAdapter.UserVH> {
private final LayoutInflater layoutInflater;
public UsersAdapter(Context context) {
this.layoutInflater = LayoutInflater.from(context);
}
@Override
public UserVH onCreateViewHolder(ViewGroup parent, int viewType) {
return new UserVH(layoutInflater.inflate(R.layout.item_users, parent, false));
}
@Override
public void onBindViewHolder(UsersAdapter.UserVH holder, int position) {
ViewCompat.setTransitionName(holder.layout.getIwAvatar(), "image_view_" + position);
holder.onBind(getItem(position));
}
public class UserVH extends RecyclerView.ViewHolder {
private UserListLayout layout;
public UserVH(View itemView) {
super(itemView);
layout = (UserListLayout) itemView;
}
public void onBind(UiBaseUser item) {
layout.bind(item);
}
}
}
TargetActivity片断
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_detail);
ButterKnife.bind(this);
initializeDagger();
bundle = getIntent().getExtras();
if (bundle != null) {
transitionName = bundle.getString(EXTRA_TRANSITION_NAME);
presenter.onCreate(baseData);
} else {
throw new IllegalStateException("Initial bundle in UserDetail Activity is null");
}
iwAvatar.setTransitionName(transitionName);
}
我觉得我失去了一些东西简单了 - 但直小时的编码用尽我的脑子不够好,不要看到它通过。请帮助我。
您正在更改列表项目的过渡名称,但您的示例中没有任何内容可以指示目标“活动”视图的相同内容。 –
我在创建片段中添加了目标活动,以显示如何通过Bundle设置过渡名称。我不想把所有的代码放在这里,因为人们通常会忽略更长的帖子。 –
您是否检查'transitionName'是否包含目标'Activity'中正确位置索引的期望值(我想它是'UserDetailActivity')? –