Fragement是轻量级的,依附在activity上使用,生命周期也是跟随activity的。
app框架层Fragement的使用分两种形式:切换Fragement时保存当前状态和不保存当前状态,通过FragmentTransaction的replace方法,replace方法相当于先移除remove()原来所有已存在的fragments,然后添加add()当前这个fragment。这就导致了一个问题,我们切换一次,然后再切换回来,相当于重新加载了这个fragment,原来的状态不复存在,这显然与我们的日常使用不符。想要保存切换后的状态,思路还是很简单的,我们先添加了若干fragments,切换后将所有fragments都隐藏hide(),并显示show()切换后的fragment即可。
核心代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fl = (FrameLayout) findViewById(R.id.fl);
fragmentManager1 = getFragmentManager();
fragmentTransaction1 = fragmentManager1.beginTransaction();
mf1 = new MyFragement1();
fragmentTransaction1.add(R.id.fl,mf1);//fl是真布局,把mf1添加到真布局中
fragmentTransaction1.commit();
}
public void click(View view)
{
fragmentTransaction1 = fragmentManager1.beginTransaction();//事务每次都要获取,使用一次后就失效了。
hide();
switch (view.getId()){
case R.id.bt1:
fragmentTransaction1.show(mf1);
break;
case R.id.bt2:
if(mf2==null)
{
mf2 = new MyFragement2();
fragmentTransaction1.add(R.id.fl,mf2);
}else{
fragmentTransaction1.show(mf2);
}
break;
case R.id.bt3:
if(mf3==null)
{
mf3 = new MyFragement3();
fragmentTransaction1.add(R.id.fl,mf3);
}else{
fragmentTransaction1.show(mf3);
}
break;
}
fragmentTransaction1.commit();
}
public void hide()//隐藏fragement,不隐藏无法显示show。
{
if(mf1!=null )
{
fragmentTransaction1.hide(mf1);
}
if(mf2!=null)
{
fragmentTransaction1.hide(mf2);
}
if(mf3!=null)
{
fragmentTransaction1.hide(mf3);
}
}