简体   繁体   English

如何在RecyclerView适配器的onBindViewHolder中声明overridePendingTransition?

[英]How to declare overridePendingTransition inside onBindViewHolder of a RecyclerView adapter?

I've created an intent object along with Bundle when a CardView is clicked and then I start the Activity . 单击CardView时,我与Bundle一起创建了一个意图对象,然后启动Activity How do I declare overridePendingTransition inside it? 如何在其中声明overridePendingTransition Code is given belew : 代码为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);
        }
    });
}

You must pass an Activity to your RecyclerView.Adapter class when declaring it like : 像下面这样声明时,必须将Activity传递给RecyclerView.Adapter类:

First of all in your Adapter's constructor add Activity field : 首先,在适配器的构造函数中添加Activity字段:

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添加以下行:

Activity thisActivity=(Activity)this;

Then in your Activity declare your adapter like : 然后在您的Activity声明您的适配器,如:

MyAdapter myAdapter=new MyAdapter(models,thisActivity);

And finally you can use this Activity in your adapter for transition like : 最后,您可以在适配器中使用此Activity进行过渡,例如:

mActivity.overridePendingTransition();

From Documentation 文档

Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next. 在startActivity(Intent)或finish()中的一种之后立即调用,以指定要执行的显式过渡动画。

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

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);
            }
        });
    }
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 这工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在其适配器的onBindViewHolder中更新recyclerView? - How do I update recyclerView inside onBindViewHolder of its adapter? 使用RecyclerView.Adapter在onBindViewHolder()内设置onItemClickListener - Set onItemClickListener inside onBindViewHolder() with RecyclerView.Adapter 如何在RecyclerView的适配器的onBindViewHolder中使用滚动侦听器? - How to use scroll listener in onBindViewHolder in Adapter of a RecyclerView? RecyclerView适配器:OnBindViewHolder - RecyclerView Adapter :OnBindViewHolder Firebase RecyclerView Adapter onBindViewHolder - Firebase RecyclerView Adapter onBindViewHolder Scrollview内部的Recyclerview未调用自定义适配器函数(onBindViewHolder) - Recyclerview inside a Scrollview not calling the Custom Adapter Function (onBindViewHolder) 从 RecyclerViewAdapter 启动BottomSheet,它在onBindViewHolder 内扩展了RecyclerView.Adapter - Launching BottomSheet from a RecyclerViewAdapter that extends with RecyclerView.Adapter inside onBindViewHolder 如何在 Activity 内的 RecyclerView 适配器声明中声明单击侦听器 - How to declare click listener within RecyclerView adapter declaration inside Activity Recyclerview 适配器 onBindViewHolder 有效负载不起作用 - Recyclerview adapter onBindViewHolder payload is not working 在 RecyclerView 适配器的 onBindViewHolder 中获取上下文 - Get context in onBindViewHolder in RecyclerView Adapter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM