如何重建与viewpager故意片段? [英] How to recreate fragment with viewpager intentionally?

查看:166
本文介绍了如何重建与viewpager故意片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用ViewPager一些碎片。我想实现在未来影响不大:如果我刷到viewpager的第一页(这样页面的索引等于0),我想重新创建它。所以,我不希望它从内存中被拉到,我想喜欢我每次刷到该页面的时间来重新创建它。
我读,我需要重写instantiateItem方法,但我不能这样做。

I am using ViewPager with some Fragments. I would like to achieve the next little effect: if I swipe to the very first page of the viewpager (so the index of the page equals 0), i would like to recreate it. So I do not want it to be pulled from the memory, I would like like to recreate it every time I swipe to that page. I read that I needed to override the instantiateItem method, but I cannot do it.

public class PagerAdapter1 extends FragmentPagerAdapter {

    private List<String> fragments;
       private static final String TAG = "FragmentPagerAdapter";
        private static final boolean DEBUG = false;

        private final FragmentManager mFragmentManager;
        private FragmentTransaction mCurTransaction = null;

    /**
     * @param fm
     * @param fragments2
     */
    public PagerAdapter1(FragmentManager fm, List<String> fragments2) {
        super(fm);
        mFragmentManager=fm;
        this.fragments = fragments2;
    }
    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
     */
    @Override
    public Fragment getItem(int position) {
        //return this.fragments.get(position);
        return Fragment.instantiate(ViewPagerActivity.context, fragments.get(position));
    }

    /* (non-Javadoc)
     * @see android.support.v4.view.PagerAdapter#getCount()
     */
    @Override
    public int getCount() {
        return this.fragments.size();
    }



    @Override
    public Object instantiateItem(View container, int position) {
       Log.i("OVERRIDE", "OVERRIDE");

        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), position);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, "Attaching item #" + position + ": f=" + fragment);
            mCurTransaction.attach(fragment);
        } else {
            fragment = getItem(position);
            if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
            mCurTransaction.add(container.getId(), fragment,
                    makeFragmentName(container.getId(), position));
        }

        return fragment;
    }
    private static String makeFragmentName(int viewId, int index) {
        return "android:switcher:" + viewId + ":" + index;
    }
} 

我从来没有覆盖的标签。所以我的第一个问题是,你为什么不我明白了吗?我应该如何重写此方法(如果这是我需要)来实现我写了previously的效果?我想这是因为我保存在0页面复选框的状态,但优化的曲折,因为在第0页,如果我刷到第1页不被摧毁,所以它不会重新它和复选框的状态不得到保存(除非我要刷卡第2页,怎么一回事,因为我用setOffScreenLimit(1))。

I never get the OVERRIDE tag. So my first question is, why dont I get that? And how should I rewrite this method (if this is what I need) to achieve the effect I wrote previously? I want it because I save a state of a checkbox at the page 0, but the optimisation twists it because the page 0 dont get destroyed if I swipe onto page 1, so it does not recreate it and a state of the checkbox dont get saved (unless I swipe to page2, beacuse I use setOffScreenLimit(1)).

推荐答案

mAdapter.notifyDataSetChanged()是一个解决方案。然而,这将删除所有页面,并再次提出实例他们回来。可喜的是没有造成任何副作用呢。 (强制关闭,或异常)

mAdapter.notifyDataSetChanged() was a solution. However, this removes all the pages and puts them back by instantiating again. The good news is hasn't caused any side effect yet. (force close, or exception)

这篇关于如何重建与viewpager故意片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆