Fragment功能与Activity相似,但Activity只能全屏显示,Fragment可占据任意大小屏幕,适于平板中的分屏模式。
一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响。
fragment添加方式有两种:
一种是在布局文件中添加;
<LinearLayout >
...
<fragment android:name="com.xx.xxFragment"
android:id="@+id/xx_frag"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
...
</LinearLayout>
另一种是在代码中动态添加,如下面示例。动态添加的好处是易于用新的fragment替换。
1.HomeFragment
2.PopupActivity: 宿主Activity
3.popup.xml:PopupActivity对应布局文件
4.popup_home.xml:homeFragment对应布局文件
popup.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pop"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
<FrameLayout
android:id="@+id/right_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/xx">
</FrameLayout>
</LinearLayout>
PopupActivity
public class PopupActivity extends Activity {
private static final String TAG = "PopupActivity";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.popup);
Debug.debug(TAG, "onCreate()");
//...一些初始化试图操作
//add fragment
FragmentTransaction ft = getFragmentManager().beginTransaction();
mHomeFragment = new HomeFragment();
ft.add(R.id.right_layout, mHomeFragment, HomeFragment.TAG);
//ft.addToBackStack(null); //调用addToBackStack按后退键时只消失fragment,否则退出activity
ft.commit();
}
//...
}
/**
*
* Fragment生命周期 onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onResume()
* onPause() -> onDestroyView() -> onDestroy()
*
* resume时 : onCreateView() -> onActivityCreated() -> onResume()
*/
public class HomeFragment extends BaseFragment{
public static final String TAG = "HomeFragment";
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
Log.i(TAG, "onAttach():"+activity.getLocalClassName());
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Debug.debug(TAG, "onCreate()");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
Debug.debug(TAG, "onCreateView()");
View root = inflater.inflate(R.layout.popup_home, null);
//...初始化视图initView(root);
return root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
Debug.debug(TAG, "onActivityCreated()");
}
@Override
public void onResume(){
Debug.debug(TAG, "onResume()");
super.onResume();
}
@Override
public void onPause(){
Debug.debug(TAG, "onPause()");
super.onPause();
}
@Override
public void onDestroyView(){
super.onDestroyView();
Debug.debug(TAG, "onDestroyView()");
}
@Override
public void onDestroy(){
super.onDestroy();
Debug.debug(TAG, "onDestroy()");
}
}
NewFragment newFragment = new NewFragment();
//传递参数
Bundle args = new Bundle();
//args.put数据
newFragment.setArgument(args);
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
ft.replace(R.id.right_layout, newFragment, "newFragment.TAG");
ft.addToBackStack(null);
ft.commit();