私は人口が多いアイテム(、2x TextView
)を持つRecyclerView
を持っています。アイテムをクリックすると、新しい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);
}
スニペット - しかし、私の脳が十分に尽くさコーディングのストレート時間は、それを見抜くないように。私を助けてください。
リストアイテムのトランジション名を変更していますが、サンプルには、ターゲットの「アクティビティ」ビューで同じことを示すものはありません。 –
Bundleを使って遷移名を設定する方法を示すために、create snippetにtargetアクティビティを追加しました。人々は通常より長い記事を無視するので、私はここにすべてのコードを入れたくありませんでした。 –
'transitionName'にあなたのターゲット' Activity'(あなたは 'UserDetailActivity'だと思います)の正しい位置インデックスを持つ期待値を含んでいるかどうかチェックしましたか? –