繁体   English   中英

Android ViewPager:销毁幻灯片上的片段?

[英]Android ViewPager: Destroy Fragment on Slide?

我基本上是在视图寻呼机的每个片段上播放动画。 当用户滑动到特定片段时,将播放动画。 但是,某些片段在我第二次访问它们时不会播放动画。 这是因为视图分页器将它们保留在内存中。

用户滑到另一个片段后,我需要销毁每个片段。 这样,每次我重新访问这些片段时,动画都会播放。

主视图:

pager = (ViewPager) findViewById(R.id.guidepager);
mAdapter = new NewUserGuideAdapter(getSupportFragmentManager());
pager.setAdapter(mAdapter);
pager.setOffscreenPageLimit(0); //Tried this too. Didnt work

分段:

public class NewUserPage_Two extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_new_user_page__two, container, false);

        //Play animation, etc
       Animation animation_1 = AnimationUtils.loadAnimation(NewUserPage_Two.this.getActivity(), R.anim.abc_slide_in_bottom);
        person1.setAnimation(animation_1);

      return rootView;
}

适配器:

public class NewUserGuideAdapter extends FragmentPagerAdapter {

    public NewUserGuideAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                return new NewUserPage_One();
            case 1:
                return new NewUserPage_Two();
            case 2:
                return new NewUserPage_Three();
            case 3:
                return new NewUserPage_One();
            case 4:
                return new NewUserPage_One();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 5;
    }
}

如何修改我的代码专家?

在片段中尝试以下操作:

((BaseAdapter) *YourContainer*.getAdapter()).notifyDataSetChanged();


您可以参考: 刷新同一活动中剩余的当前片段(ListView数据)

ViewPager提供了一种方法mViewPager.setOffscreenPageLimit(0);

Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state. Pages beyond this limit will be recreated from the adapter when needed.

public void setOffscreenPageLimit(int limit) {
    if (limit < DEFAULT_OFFSCREEN_PAGES) {
        Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " +
                DEFAULT_OFFSCREEN_PAGES);
        limit = DEFAULT_OFFSCREEN_PAGES;
    }
    if (limit != mOffscreenPageLimit) {
        mOffscreenPageLimit = limit;
        populate();
    }
}

顺便说一下,这就是方法主体DEFAULT_OFFSCREEN_PAGES=1认为Google添加了此限制,因为您在滑动时至少需要当前项目之间的2个视图。 您可以尝试使用addOnPageChangeListener()并在onPageSelected上启动动画。

暂无
暂无

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

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