在ActionBar中添加标签(Tabs),每个标签对应的是一个Fragment,点击不同的Tab时,就会切换到对应的Fragment。
这里有五个关键步骤:
1. 要实现 ActionBar.TabListener接口,当点击Tab的时候触发这个接口里面的事件,有
onTabSelected()
, onTabUnselected()
, 和 onTabReselected()
. 实现ActionBar.TabListener接口时,应当在类内有个Fragment的引用,这样点击这个Tab时就可以调用对应的Fragment.
2. 通过getActionBar()
方法得到Activity中的ActionBar。
3. 设置AcitonBar的操作模式: setNavigationMode(NAVIGATION_MODE_TABS)。
4. 在ActionBar中添加Tabs:一.调用AciontBar的newTab()生成一个ActionBar.Tab. 二.为Tab增加text或者icon .调用setText()
, setIcon() 三.为每个
ActionBar.Tab
添加ActionBar.TabListener.
5. 调用addTab()将生成的Tab加入ActionBar中
以下是例子代码,就是为了测试,没有实际的用途.
有两个Fragment:EditFragment和ComputerFragment,对应的Tab是"编辑"和计算。他们的XML和Activity如下:
EditFragment:
public class EditFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { System.out.println("EidtFragment--->onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("EidtFragment--->onCreateView"); return inflater.inflate(R.layout.editfragment, container, false); } @Override public void onStop() { System.out.println("EidtFragment--->onStop"); super.onStop(); } }
editfragment.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:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="请输入你的信息:" android:textSize="20dp" /> <EditText android:layout_width="fill_parent" android:layout_height="40pt" android:layout_margin="5dp" android:background="@android:color/darker_gray" android:textSize="18dp" /> </LinearLayout>
ComputerFragment:
public class ComputerFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { System.out.println("ComputerFragment--->onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("ConputerFragment--->onCreateView"); return inflater.inflate(R.layout.computerfragment, container, false); } @Override public void onStop() { System.out.println("ConputerFragment--->onStop"); super.onStop(); } }
computerfragment.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:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="简单加法计算" android:textSize="20dp" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@android:color/darker_gray" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@android:color/darker_gray" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="开始计算" /> </LinearLayout>
主要的程序:MainActivity:
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { System.out.println("MainActivity--->onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.main); // 得到Activity的ActionBar ActionBar actionBar = getActionBar(); // 设置AcitonBar的操作模型 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // 将Activity的头部去掉 actionBar.setDisplayShowTitleEnabled(false); // 生成Tab Tab edit = actionBar.newTab().setText("编辑"); Tab computer = actionBar.newTab().setText("计算"); // 为每个Tab添加Listener MyTabListener editListener = new MyTabListener(new EditFragment()); edit.setTabListener(editListener); MyTabListener computerListener = new MyTabListener(new ComputerFragment()); computer.setTabListener(computerListener); // 将Tab加入ActionBar中 actionBar.addTab(edit); actionBar.addTab(computer); } @Override protected void onStop() { System.out.println("MainActivity--->onStop"); super.onStop(); } /** * 实现ActionBar.TabListener接口 */ class MyTabListener implements TabListener { // 接收每个Tab对应的Fragment,操作 private Fragment fragment; public MyTabListener(Fragment fragment) { this.fragment = fragment; } public void onTabReselected(Tab tab, FragmentTransaction ft) { } // 当Tab被选中的时候添加对应的Fragment public void onTabSelected(Tab tab, FragmentTransaction ft) { ft.add(R.id.context, fragment, null); } // 当Tab没被选中的时候删除对应的此Tab对应的Fragment public void onTabUnselected(Tab tab, FragmentTransaction ft) { ft.remove(fragment); } } }
程序运行结果: