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。就这样。