Android-为ViewPager内片段的RecyclerView项设置动画

Android-为ViewPager内片段的RecyclerView项设置动画,android,android-fragments,android-viewpager,android-animation,Android,Android Fragments,Android Viewpager,Android Animation,我正在将ViewPager与片段一起使用。每个片段都有一个带有GridLayoutManager的RecyclerView。在我的RecyclerView适配器中,我在onBindViewHolder上设置了一个动画 问题: 当ViewPager一次加载两个片段时,即使视图不可见,第二个片段的动画也会完成 预期产出: 当有人在viewPager上滑动时,所有的RecyclerView项目都应该动画化 回收视图适配器 public void onBindViewHolder(ViewHolder

我正在将
ViewPager
片段一起使用。每个片段都有一个带有
GridLayoutManager
RecyclerView
。在我的
RecyclerView
适配器中,我在
onBindViewHolder
上设置了一个动画

问题:

当ViewPager一次加载两个片段时,即使视图不可见,第二个片段的动画也会完成

预期产出:

当有人在viewPager上滑动时,所有的RecyclerView项目都应该动画化

回收视图适配器

public void onBindViewHolder(ViewHolder viewHolder, final int position) {

    viewHolder.getServiceImageView().setImageResource(mServices.get(position).getImageResource());
    viewHolder.getServiceNameView().setText(mServices.get(position).getServiceName());
    viewHolder.getPricePerHourView().setText(String.valueOf(mServices.get(position).getPricePerHour()));
    setAnimation(viewHolder.serviceItemContainer, position);
}

private void setAnimation(View viewToAnimate, int position)
{
    // If the bound view wasn't previously displayed on screen, it's animated
    if (position > lastPosition)
    {
        Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.fade_in);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}
片段代码

public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_cleaning, container, false);
    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
    mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), SPAN_COUNT));
    mServicesAdapter = new RecyclerViewAdapter(getContext(), data);
    mRecyclerView.setAdapter(mServicesAdapter);
    return rootView;
}
可视寻呼机适配器

private class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                fragment = new Fragment1();
            case 1:
                return new Fragment2();
            case 2:
                return new Fragment3();
            default:
                return new Fragment4();
        }
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return getString(R.string.title_section1).toUpperCase(l);
            case 1:
                return getString(R.string.title_section2).toUpperCase(l);
            case 2:
                return getString(R.string.title_section3).toUpperCase(l);
            case 3:
                return getString(R.string.title_section4).toUpperCase(l);
        }
        return null;
    }
有人能建议我怎么做吗?

试试这个

  • 在要设置动画的片段的活动中实现own onResumeFragment()
  • 在onResumeFragment()处调用适配器.notifyDataSetChanged();启动动画的步骤

  • 几个月前我就有这个问题了。这是因为viewPager,当你接近下一页时,它会加载数据,以一种简单的方式处理大量数据。@Ashkan是的,我知道这一点。如何解决这个问题并获得预期的输出。我搜索了一会儿,但没有找到正确的答案。找到了就打电话给我是的,找到了。当我需要一些动作来工作时,当片段是onresume并且可见时,我在Viewpager中使用它。可能会有帮助,我应该试试这个,tnx。我对onResume¬ifyDatasetchange提示投了赞成票,尽管您不需要创建自己的onResume方法。只需在所需片段中使用onResume,并调用adapter.notifydatasetchange。就这样。