我有RecyclerView
个已填充的项目(ImageView
,2x TextView
)。点击项目后,我开始新的Activity
。我想使用材质转换,我想重新排列ImageView
。
两个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类中,我引用了UserListLayout
所在的布局item_list
(ImageView
)。
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);
}
我觉得我错过了一些简单的东西 - 但是直接的编码时间已经足够用尽我的大脑,没有看透。请帮帮我。
答案 0 :(得分:1)
您的问题存在于点击处理程序中(如果我正确的话,openUserDetails(...)
会这样做。)
iwAvatar = ButterKnife.findById(this, R.id.iw_avatar);
无法在此处使用,因为您的布局中有多个具有相同ID R.id.iw_avatar
的视图。您可以执行以下操作以查找正确的ImageView
实例:
itemView
中的UserVH
)传递给openUserDetails(...)
(我想你现在也是这样做 )findViewById(...)
param view
,找到实际的ImageView
。