5

I've created an intent object along with Bundle when a CardView is clicked and then I start the Activity. How do I declare overridePendingTransition inside it? Code is given belew :

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.textView.setText(strings[position]);
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(holder.itemView.getContext(),SecondActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("list",strings[position]);
            intent.putExtras(bundle);
            holder.itemView.getContext().startActivity(intent);
            //overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
        }
    });
}
Swapnil Sharma
  • 351
  • 2
  • 4
  • 13

4 Answers4

8

You must pass an Activity to your RecyclerView.Adapter class when declaring it like :

First of all in your Adapter's constructor add Activity field :

public class MyAdapter extends RecyclerView.Adapter{

Activity mActivity;
ArrayList<YourModel> models;

public MyAdapter(ArrayList<YourModel> models,Activity mActivity){
    this.mActivity=mActivity;
    this.models=models;
}
}

Then add this line in your Activity:

Activity thisActivity=(Activity)this;

Then in your Activity declare your adapter like :

MyAdapter myAdapter=new MyAdapter(models,thisActivity);

And finally you can use this Activity in your adapter for transition like :

mActivity.overridePendingTransition();
Yasin Kaçmaz
  • 6,573
  • 5
  • 40
  • 58
1

From Documentation

Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.

You need to call it with the context.

@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.textView.setText(strings[position]);
    holder.cardView.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View view) {
        Intent intent = new Intent(holder.itemView.getContext(),SecondActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("list",strings[position]);
        intent.putExtras(bundle);
        holder.itemView.getContext().startActivity(intent);
        mContext.overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out); 
    } 
}); 
} 
Aman Jain
  • 2,975
  • 1
  • 20
  • 35
1

This is what worked for me, may not be the best way to do it but at least it works. In this case parent is the parent layout that holds all the items but you could set the click listener to any view.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    class ViewHolder extends RecyclerView.ViewHolder {
        ConstraintLayout parent;
        ...
        ViewHolder(View itemView) {
            super(itemView);

            parent                  = itemView.findViewById(R.id.parent);
            ...
        }
    }

    private Context mContext;
    ...

    public MyAdapter(Context context, List<Something> something) {
        mContext = context;
        ...
    }
    ...
    private Context getContext() {
        return mContext;
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int position) {
        ...
        viewHolder.parent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getContext(), SomeActivity.class);
                getContext().startActivity(intent);
                ((Activity) getContext()).overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
            }
        });
    }
Seven
  • 3,232
  • 1
  • 17
  • 15
0
usersviewHolder.mview.setOnClickListener(new View.OnClickListener(){

    public Activity mContext;
    @Override
    public void onClick(View view){

        Intent eventpage_intent = new Intent(EventFragment.this.getActivity(), Event_Main_Page.class);
        eventpage_intent

        startActivity(eventpage_intent);

        mContext = (Activity) usersviewHolder.itemView.getContext();
        mContext.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
    }
});

This worked

alexander.polomodov
  • 5,396
  • 14
  • 39
  • 46
andy bit1
  • 111
  • 1
  • 4