如何在 RecyclerView 适配器的 onBindViewHolder 中声明 overridePendingTransition?
How to declare overridePendingTransition inside onBindViewHolder of a RecyclerView adapter?
当 CardView
被点击时,我创建了一个 intent 对象和 Bundle
,然后我启动了 Activity
。我如何在其中声明 overridePendingTransition
?代码如下:
@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);
}
});
}
Call immediately after one of the flavors of startActivity(Intent) or
finish() to specify an explicit transition animation to perform next.
需要结合上下文调用。
@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);
}
});
}
您必须将 Activity
传递给您的 RecyclerView.Adapter
class 声明时:
首先在适配器的构造函数中添加 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;
}
}
然后在您的 Activity
中添加这一行:
Activity thisActivity=(Activity)this;
然后在您的 Activity
中声明您的适配器:
MyAdapter myAdapter=new MyAdapter(models,thisActivity);
最后,您可以在适配器中使用此 Activity
进行转换,例如:
mActivity.overridePendingTransition();
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);
}
});
这有效
这对我有用,可能不是最好的方法,但至少它有效。在这种情况下,父布局是包含所有项目的父布局,但您可以将点击侦听器设置为任何视图。
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);
}
});
}
当 CardView
被点击时,我创建了一个 intent 对象和 Bundle
,然后我启动了 Activity
。我如何在其中声明 overridePendingTransition
?代码如下:
@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);
}
});
}
Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.
需要结合上下文调用。
@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);
}
});
}
您必须将 Activity
传递给您的 RecyclerView.Adapter
class 声明时:
首先在适配器的构造函数中添加 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;
}
}
然后在您的 Activity
中添加这一行:
Activity thisActivity=(Activity)this;
然后在您的 Activity
中声明您的适配器:
MyAdapter myAdapter=new MyAdapter(models,thisActivity);
最后,您可以在适配器中使用此 Activity
进行转换,例如:
mActivity.overridePendingTransition();
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);
}
});
这有效
这对我有用,可能不是最好的方法,但至少它有效。在这种情况下,父布局是包含所有项目的父布局,但您可以将点击侦听器设置为任何视图。
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);
}
});
}