2

The recyclerview is in a (androidx) fragment attached to the main activity. This is the part of the recycler adapter from which the new activity is called:

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);
        }
    }
}

That's the error I get (once for every shared element i pass to ActivityOptionsCompat):

E/BufferItemConsumer: [unnamed-29987-0] Failed to release buffer: Unknown error -1 (1)

This error gives me every time you call "finishAfterTransition();" a bug where the current window loses focus

Edit: As Mahabub Karim suggested, I replaced the Activity Reference with a callback (unfortunately it does not change the error message):

//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);
}
...
josh
  • 126
  • 1
  • 13

1 Answers1

0

Never ever take activity or fragment reference to adapter cause it's create a cyclic dependency means activity takes reference of adapter and adapter takes reference of activity so there is no way to leave memory. Always each one takes memory reference. Use callback method instead, which will implement by activity from adapter listener.

Use this links accepted answer -> Callback from Adapter

Mahabub Karim
  • 810
  • 11
  • 17
  • I have removed the reference and replaced it with callbacks, but the error message remains the same – josh Apr 22 '19 at 19:01