`
he91_com
  • 浏览: 378332 次
文章分类
社区版块
存档分类
最新评论

Android Fragment示例

 
阅读更多

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();
	}
        //...
}


HomeFragment

/**
 * 
 * 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()");
	}
}


当想用新的fragment替换掉上面HomeFragment显示时

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();


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics