我有一個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')? –