Обзор переработчика находится во фрагменте (androidx), прикрепленном к основному виду деятельности. Это часть адаптера вторичной переработки, от которой называется новое действие:
MainActivity activity;
@Override
public void onBindViewHolder(final MyRecyclerAdapter.ViewHolder viewHolder, final int position) {
final View background = viewHolder.background;
ViewCompat.setTransitionName(background,"background_" + position);
background.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(activity, DetailActivity.class);
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, background, "background_" + position).toBundle();
activity.startActivity(intent, options);
}
}
}
Это ошибка, которую я получаю (один раз для каждого общего элемента, который я передаю в ActivityOptionsCompat):
E/BufferItemConsumer: [unnamed-29987-0] Не удалось освободить буфер: неизвестная ошибка -1 (1)
Эта ошибка дает мне каждый раз, когда вы вызываете "finishAfterTransition();" ошибка, при которой текущее окно теряет фокус
Редактировать: как предложил Махабуб Карим, я заменил ссылку на занятие обратным вызовом (к сожалению, это не меняет сообщение об ошибке):
//Adapter Class
OnItemClickListener onItemClickListener;
public static interface OnItemClickListener {
public abstract void onItemClicked(MyRecyclerAdapter.ViewHolder viewHolder, int position);
}
@Override
public void onBindViewHolder(final MyRecyclerAdapter.ViewHolder viewHolder, final int position) {
final View background = viewHolder.background;
ViewCompat.setTransitionName(background,"background_" + position);
background.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onItemClicked(viewHolder,position);
}
}
}
public void setListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
//MainActivity Class
...
@Override
public void onItemClicked(MyRecyclerAdapter.ViewHolder viewHolder, int position) {
final View background = viewHolder.background;
Intent intent = new Intent(this, DetailActivity.class);
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, background, "background_" + position).toBundle();
startActivity(intent, options);
}
...
Никогда не выполняйте действия или ссылки фрагмента на адаптер, потому что это создает циклическую зависимость, означает, что активность использует ссылку на адаптер, а адаптер принимает ссылку на активность, поэтому нет возможности покинуть память. Всегда каждый берет ссылку на память. Вместо этого используйте метод обратного вызова, который будет реализован по активности прослушивателя адаптера.
По этой ссылке принят ответ → Обратный звонок от адаптера