Fragment和ActionBar都是Android3.0之后出现的,Fragment,碎片,主要是为了支持更多的UI设计在大屏幕设备上,如平板。因为现在设备的屏幕越来越大,使用Fragment可以更灵活的管理视图层次的变化。像Activity一样,可以创建Fragment来包含View,进行布局,但是Fragment必须嵌入在Activity中,不能单独存在,而且一个Activity可以嵌入多个Fragment,同时一个Fragment可以被多个Activity重用。Action Bar被认为是新版Android系统中最重要的交互元素,在程序运行中一直置于顶部,主要起到的作用在于:突出显示一些重要操作、在程序中保持统一的页面导航和切换方式、将使用频率低的功能放在Action overflow中,节省页面空间、一个固定区域显示程序标示。
Fragment的生命周期
工程目录结构
要使用Fragment首先要继承Fragment Fragment1.java
package com.apical.dzt.fragmentbar; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub // return super.onCreateView(inflater, container, savedInstanceState); System.out.println("---------------onCreateView"); View v = inflater.inflate(R.layout.fragment1, container, false); Button btn = (Button) v.findViewById(R.id.btn1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "button", Toast.LENGTH_SHORT) .show(); } }); return v; } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub System.out.println("---------------onAttach"); super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub System.out.println("---------------onCreate"); super.onCreate(savedInstanceState); } @Override public void onStart() { // TODO Auto-generated method stub System.out.println("---------------onStart"); super.onStart(); } @Override public void onResume() { // TODO Auto-generated method stub System.out.println("---------------onResume"); super.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub System.out.println("---------------onSaveInstanceState"); super.onSaveInstanceState(outState); } @Override public void onPause() { // TODO Auto-generated method stub System.out.println("---------------onPause"); super.onPause(); } @Override public void onDestroyView() { // TODO Auto-generated method stub System.out.println("---------------onDestroyView"); super.onDestroyView(); } @Override public void onDestroy() { // TODO Auto-generated method stub System.out.println("---------------onDestroy"); super.onDestroy(); } @Override public void onDetach() { // TODO Auto-generated method stub System.out.println("---------------onDetach"); super.onDetach(); } }fragment1.xml 布局文件定义
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f00" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:text="fragment1" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fragment1" /> </LinearLayout>
package com.apical.dzt.fragmentbar; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 得到ActionBar ActionBar actionBar = getActionBar(); // actionBar.setDisplayShowTitleEnabled(false); // actionBar.setDisplayShowCustomEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); // 不显示标题 // 创建Tab并设置标签 Tab first = actionBar.newTab().setText(R.string.first); Tab second = actionBar.newTab().setText(R.string.second); // 设置图标 first.setIcon(R.drawable.ic_launcher); second.setIcon(R.drawable.ic_launcher); // 为每个Fragment创建监听器 myTabListener fitstTab = new myTabListener(new Fragment1()); myTabListener secondTab = new myTabListener(new Fragment2()); // 为Tab设置监听器 first.setTabListener(fitstTab); second.setTabListener(secondTab); // 把Tab添加到ActionBar中 actionBar.addTab(first); actionBar.addTab(second); } /** * 实现ActionBar.TabListener接口 * * @author Administrator * */ class myTabListener implements TabListener { // 保存每个Tab对应的Fragment private Fragment fragment; public myTabListener(Fragment ft) { fragment = ft; } /** * Tab被选中时显示相应的Fragment */ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub ft.replace(R.id.fragment_replace, fragment, null); } /** * 选中其它的Tab就移除前一个Fragment */ @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub ft.remove(fragment); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } } }
activity_main.xml的定义很简单
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragment_replace" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </FrameLayout>
实现的效果图
Demo下载
http://download.csdn.net/detail/deng0zhaotai/6956235
原文:http://blog.csdn.net/deng0zhaotai/article/details/19833485