【问题标题】:Android - Animate RecyclerView Item of Fragment Inside ViewPagerAndroid - 动画 RecyclerView 在 ViewPager 中的 Fragment 项
【发布时间】:2015-08-31 03:13:39
【问题描述】:

我正在使用ViewPagerFragments。每个片段都有一个RecyclerViewGridLayoutManager。在我的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 是的,我知道这一点。如何解决这个问题并获得预期的输出。
  • 我搜索了一段时间,但没有找到正确的答案。找到了就给我打电话

标签: android android-fragments android-viewpager android-animation


【解决方案1】:

试试这个

  1. 在要动画的片段的 Activity 处实现自己的 onResumeFragment()
  2. 在 onResumeFragment() 调用 adapter.notifyDataSetChanged();开始动画

【讨论】:

  • 是的,确实如此。当片段处于​​恢复状态且可见时我需要一些操作来工作时,我在 Viewpager 中使用它。可能是帮助looksok.wordpress.com/2013/11/02/…
  • 我应该试试这个,tnx。
  • 我赞成 onResume 和 notifyDatasetchange 提示,尽管您不需要创建自己的 onresume 方法。只需在所需片段中使用 onResume 并调用 adapter.notifydatasetchange。就是这样。
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多