【问题标题】:Android ViewPager: Destroy Fragment on Slide?Android ViewPager:销毁幻灯片上的片段?
【发布时间】:2015-12-10 11:09:57
【问题描述】:

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

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

主视图:

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

我该如何修改我的代码?

【问题讨论】:

    标签: java android android-layout android-fragments mobile


    【解决方案1】:

    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.

    【讨论】:

    • 我试过那个伴侣(问题中也提到过)。没用:)
    • 抱歉没看到
    • 这不起作用,因为默认值为 1,它可以低于此值。
    【解决方案2】:

    在片段中试试这个:

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


    可以参考:Refresh Current Fragment (ListView Data) remaining in the same activity

    【讨论】:

    • 我应该把这个放在哪里?
    • 我很困惑:/您可以编辑您的代码以匹配我的问题代码吗?我不确定我是否理解容器是什么。谢谢老哥
    • 你看过链接了吗?
    • 你有没有在相同的线路上尝试过?
    【解决方案3】:
    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顺便说一句。我认为谷歌添加了这个限制,因为你在滑动时至少需要当前项目之间的 2 个视图。 您可以尝试使用addOnPageChangeListener() 并在onPageSelected 上开始您的动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-27
      • 2023-03-22
      • 1970-01-01
      • 2022-01-03
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多