简体   繁体   English

Android - ViewPager内的片段Animate RecyclerView项目

[英]Android - Animate RecyclerView Item of Fragment Inside ViewPager

I am using ViewPager with Fragments . 我正在使用ViewPagerFragments Each Fragment have a RecyclerView with GridLayoutManager . 每个片段都有一个带有GridLayoutManagerRecyclerView Inside my RecyclerView adapter i have set up an animation on onBindViewHolder . 在我的RecyclerView适配器里面,我在onBindViewHolder上设置了一个动画。

Problem : 问题:

As ViewPager Loads two fragments at once, the animation for second fragments gets completed even if the view is not visible 由于ViewPager一次加载两个片段,即使视图不可见,第二个片段的动画也会完成

Expected output : 预期产量:

When someone swipe on viewPager all the RecyclerView Item should animate. 当有人在viewPager上滑动时,所有RecyclerView项都应该设置动画。

RecyclerView Adapter 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;
    }
}

Fragment Code 片段代码

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

ViewPager adapter ViewPager适配器

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

Can anyone suggest me how to do this? 谁能建议我怎么做?

Try this 尝试这个

  1. Implement own onResumeFragment() at Activity of fragment you want to animate 在要设置动画的片段的Activity上实现自己的onResumeFragment()
  2. At onResumeFragment() call adapter.notifyDataSetChanged(); 在onResumeFragment()上调用adapter.notifyDataSetChanged(); to start animations 开始动画

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM