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

来源:互联网 发布:工艺流程软件软件 编辑:程序博客网 时间:2024/04/28 20:03

其实思路 很简单 就是在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的直接显示和隐藏要低的多的。

0 0