gpt4 book ai didi

Android - 在 ViewPager 中动画 RecyclerView fragment 的项目

转载 作者:太空狗 更新时间:2023-10-29 14:55:03 27 4
gpt4 key购买 nike

我正在使用 ViewPagerFragments。每个 Fragment 都有一个 RecyclerViewGridLayoutManager。在我的 RecyclerView 适配器中,我在 onBindViewHolder 上设置了一个动画。

问题:

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

预期输出:

当有人在 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;
}
}

fragment 代码

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

有人可以建议我怎么做吗?

最佳答案

试试这个

  1. 在要设置动画的 fragment 的 Activity 上实现自己的 onResumeFragment()
  2. 在 onResumeFragment() 调用 adapter.notifyDataSetChanged();开始动画

关于Android - 在 ViewPager 中动画 RecyclerView fragment 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32303492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com