为了账号安全,请及时绑定邮箱和手机立即绑定

在 RecyclerView.ViewHolder 中获取上下文

在 RecyclerView.ViewHolder 中获取上下文

慕容森 2021-06-11 14:05:33
我想在 ListView 项目首次出现时为其设置动画。我有以下观点:public class SimpleViewHolder extends RecyclerView.ViewHolder{    private TextView  simpleTextView;    public SimpleViewHolder(final View itemView, final SimpleAdapter.onItemClickListener listener)     {        super(itemView);        simpleTextView  = (TextView)  itemView.findViewById(R.id.simple_text);        RotateAnimation rotate = new RotateAnimation(0, 360,                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,                0.5f);        rotate.setDuration(1000);        rotate.setRepeatCount( 0 );        simpleTextView.setAnimation(rotate);    }    public void bindData(final SimpleViewModel viewModel)    {        simpleTextView.setText( viewModel.getSimpleText() );    }}一切都很好,除了不是以编程方式设置动画,我想使用以下方法从 XML 文件加载它们:Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.myanimation);但我不清楚如何获取/传递上下文到 RecyclerView.ViewHolder 或者这是否是制作动画的正确位置。如何在 RecyclerView.ViewHolder 中加载 XML 动画,这是为列表项制作动画的正确位置吗?谢谢!
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

你可以itemView.getContext()用来获取上下文


查看完整回答
反对 回复 2021-06-30
?
白板的微信

TA贡献1883条经验 获得超3个赞

获得的正确方法Context可能是例如。在实施范围内onLongClick():


@Override

public boolean onLongClick(View viewHolder) {


    this.mRecyclerView = (SomeLinearView) viewHolder.getParent();


    Context context;

    if(viewHolder.isInEditMode()) {

        context = ((ContextThemeWrapper) this.mRecyclerView.getContext()).getBaseContext();

    } else  {

        context = this.mRecyclerView.getContext();

    }

}

这不会在编辑模式(即 XML 预览)下崩溃。将所有变量声明final为仅是无用的,并且通常会造成阻碍,除非由于更改范围而被要求这样做。


并且可以应用类似的布局动画:


int resId = R.anim.some_animation;

LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(context, resId);

this.mRecyclerView.setLayoutAnimation(animation);


查看完整回答
反对 回复 2021-06-30
?
慕沐林林

TA贡献2016条经验 获得超9个赞

我不反对动画的放置。我认为这是正确的地方。关于上下文,我会在构造函数中发送它。


public SimpleViewHolder(final View itemView, final SimpleAdapter.onItemClickListener listener, Context context) {

 //use this context...


}

如果您的 Recyclerview 没有上下文,那么您也可以将上下文传递给 Recycleview。我不认为有另一种方式


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信