简介:
碎片(Fragment)是嵌入到活动当中。
它和活动类型同样也能包含布局,也有自己的生命周期。
图片来自 http://www.runoob.com/w3cnote/android-tutorial-fragment-base.html
1、使用FrameLayout来放碎片
<FrameLayout
android:id="@+id/frame_layout"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
2、碎片
public class FirstFragment extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if(view==null)
view=inflater.inflate(R.layout.first_layout,container,false);
return view;
}
}
3、将所有碎片定义为全局变量
private FirstFragment fg_First=new FirstFragment();
private SecondFragment fg_Second=new SecondFragment();
private ThirdFragment fg_Third=new ThirdFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
replaceFragment(fg_First);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.btnFirst:
replaceFragment(fg_First);
break;
case R.id.btnSecond:
replaceFragment(fg_Second);
break;
case R.id.btnThird:
replaceFragment(fg_Third);
break;
}
}
private void replaceFragment(Fragment fragment){
// 1、创建碎片管理器
FragmentManager fragmentManager=getSupportFragmentManager();
// 2、开启一个事务
FragmentTransaction transaction=fragmentManager.beginTransaction();
// 3、将指定容器中的碎片,替换掉
transaction.replace(R.id.frame_layout,fragment);
//返回栈
//transaction.addToBackStack(null);
// 4、提交事务
transaction.commit();
}
另外一种方式
private FirstFragment fg_first;
if(fg_first==null){
fg_first=new FirstFragment();
fragmentTransaction.add(R.id.activity_main_frame_layout,fg_first);
}else {
fragmentTransaction.show(fg_first);
}
//最后记得提交修改
fragmentTransaction.commit();
void hideAllFragment(FragmentTransaction fragmentTransaction ){
if(fg_first!=null)
fragmentTransaction.hide(fg_first);
if(fg_second!=null)
fragmentTransaction.hide(fg_second);
if(fg_third!=null)
fragmentTransaction.hide(fg_third);
}