Android - 在ViewPager中的Fragment中动画化RecyclerView的项目

3
我正在使用带有片段的ViewPager。每个片段都有一个GridLayoutManager的RecyclerView。在我的RecyclerView适配器中,我已经在onBindViewHolder上设置了动画。
问题:
由于ViewPager一次加载两个片段,因此即使视图不可见,第二个片段的动画也会完成。
期望输出:
当有人在ViewPager上滑动时,所有RecyclerView项都应该执行动画。
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;
}

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

有人可以建议我如何做到这一点吗?

我几个月前遇到过这个问题。这是由于ViewPager引起的,它在接近下一页时加载数据,以简单的方式处理大量数据。 - Ashkan
@Ashkan 是的,我知道这个问题。如何解决它并获得预期的输出。 - shubendrak
我找了一段时间,但没有找到正确的答案。如果你找到了,请给我打电话。 - Ashkan
1个回答

1

请尝试以下方法

  1. 在您希望进行动画的片段的Activity中实现自己的onResumeFragment()
  2. 在onResumeFragment()中调用adapter.notifyDataSetChanged();以启动动画

是的,它可以。当我需要在片段onresume和可见时执行某些操作时,我在Viewpager中使用这个。可能会有所帮助 https://looksok.wordpress.com/2013/11/02/viewpager-with-detailed-fragment-lifecycle-onresumefragment-including-source-code/ - eurosecom
我应该尝试一下,谢谢。 - Ashkan
我为onResume和notifyDatasetchange提示点了赞,尽管您不需要创建自己的onresume方法。只需在所需的片段内使用onResume并调用adapter.notifydatasetchange即可。就这样。 - B L Λ C K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接