ViewPager加fragment如何保存fragment里面的状态

其实思路 很简单 就是在fragment的oncreateview方法里判断 这个view是不是NULL,如果是null,则是第一次加载,那么初始化数据,否则复用这个view,只刷新需要刷新的数据,有一点注意的是,在复用这个view之前,这个view已经有了一个父布局,所以必须把它去掉,然后再添加。

代码比较简单,就不用demo了,直接上源代码:

public class F2 extends Fragment {
    private View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if (view == null) {
            view = inflater.inflate(R.layout.f, container, false);
            initData();
        }
        if (view.getParent() != null) {
            ((ViewGroup) view.getParent()).removeView(view);
            refeshData();
        }
        return view;
    }

    // 初次加载数据
    private void initData() {

    }

    // 刷新数据
    private void refeshData() {

    }
}

然后是mainactivity:


public class MainActivity extends FragmentActivity {
    private ViewPager  vp;
    private List<Fragment> list_f = new ArrayList<Fragment>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = (ViewPager) findViewById(R.id.vp);
        list_f.add(new F1());
        list_f.add(new F2());
        list_f.add(new F3());
        vp.setAdapter(new Myadpter(getSupportFragmentManager()));
    }

    class Myadpter extends FragmentPagerAdapter{

        public Myadpter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }

        @Override
        public Fragment getItem(int arg0) {
            // TODO Auto-generated method stub
            return list_f.get(arg0);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list_f.size();
        }



    }

其实我建议没必要用viewpager加fragment,完全可以用viewpager+普通的view来代替,就像这个例子里的,三个fragment,当滑动到第三个的时候,第一个肯定会被销毁,也就是说viewpager总是会加载左中右三个,无论如何,fragment都被移除然后再添加,而不是像普通的activity一样可以用hide和show来控制,所以这样效率实际上是比普通的View的直接显示和隐藏要低的多的。

你可能感兴趣的:(ViewPager加fragment如何保存fragment里面的状态)