[英]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.