Fragment 中 onCreate和onCreateView的区别

官方的解释:

onCreate是指创建该fragment,类似于Activity.onCreate,你可以在其中初始化除了view之外的东西;

onCreateView是创建该fragment对应的视图,你必须在这里创建自己的视图并返回给调用者。

 

先看下Fragment的生命周期如图:

 

实现Fragment的UI必须实现的onCreateView()方法

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.xx, container,false);
        return view;
    }

onCreateView()中container参数代表该Fragment在Activity中的父控件;savedInstanceState提供了上一个实例的数据。  

 

还有就是Fragment放入ViewPager 左右滑动的那种效果

mPager=(ViewPager) findViewById(R.id.viewpager);
        fragmentList=new ArrayList<Fragment>();
        Fragment firstFragment=FragmentFactory.newInstance("this is first fragment");
        Fragment secondFragment=FragmentFactory.newInstance("this is second fragment");
        Fragment thirdFragment=FragmentFactory.newInstance("this is third fragment");
        Fragment fourthFragment=FragmentFactory.newInstance("this is fourth fragment");
        fragmentList.add(firstFragment);
        fragmentList.add(secondFragment);
        fragmentList.add(thirdFragment);
        fragmentList.add(fourthFragment);
public class FragmentFactory extends Fragment{
    private String content;
    private String defaultContent="default content";
    
    static FragmentFactory newInstance(String s){
        FragmentFactory newFragment=new FragmentFactory();
        Bundle bundle=new Bundle();
        bundle.putString("content", s);
        newFragment.setArguments(bundle);
        return newFragment;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        Bundle args=getArguments();
        content=args!=null?args.getString("content"):defaultContent;        
        View view= inflater.inflate(R.layout.guide_2, container,false);
        TextView tv = (TextView) view.findViewById(R.id.tv);
        tv.setText(content);
        return view;
    }
    
}

需要注意一点的是 FragmentFactory newFragment=new FragmentFactory(); 这个时候是还没有进入Fragment的生命周期,会进入构造方法,汗!一开始理解错了。

Fragment对象在ViewPager 容器里面,一次只能载入2个Fragment。

 

posted @ 2015-01-19 16:35  asijack  阅读(9093)  评论(0编辑  收藏  举报