带有标签的Android Actionbar Sherlock

在此处输入图像描述

我正在尝试使用下面的Tabs实现ActionBar Sherlock,如上面的线框所示。

我应该使用TabActivity吗? – 因为我看到它被弃用了。 这是实现同样目标的最佳方式。

我使用SherlockFragmentActivity作为tabview容器并使用SherlockFragment作为选项卡实现了此function。 这是一个草图(我省略了通常的Android活动):

这是具有两个选项卡的tabview活动:

 public class TabViewActivity extends SherlockFragmentActivity { // store the active tab here public static String ACTIVE_TAB = "activeTab"; @Override public void onCreate(Bundle savedInstanceState) { .. final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // add the first tab which is an instance of TabFragment1 Tab tab1 = actionBar.newTab() .setText("TabTitle1") .setTabListener(new TabListener( this, "tab1", TabFragment1.class)); actionBar.addTab(tab1); // add the second tab which is an instance of TabFragment2 Tab tab2 = actionBar.newTab() .setText("TabTitle2") .setTabListener(new TabListener( this, "tab2", TabFragment2.class)); actionBar.addTab(tab2); // check if there is a saved state to select active tab if( savedInstanceState != null ){ getSupportActionBar().setSelectedNavigationItem( savedInstanceState.getInt(ACTIVE_TAB)); } } @Override protected void onSaveInstanceState(Bundle outState) { // save active tab outState.putInt(ACTIVE_TAB, getSupportActionBar().getSelectedNavigationIndex()); super.onSaveInstanceState(outState); } } 

这是包含标签内容的TabFragment

 public class TabFragment extends SherlockFragment { // your member variables here @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_va_esh, container, false); ... // do your view initialization here return view; } } 

最后这是处理制表符开关的TabListener

 public class TabListener implements ActionBar.TabListener{ private TabFragment mFragment; private final Activity mActivity; private final String mTag; private final Class mClass; public TabListener(Activity activity, String tag, Class clz) { mActivity = activity; mTag = tag; mClass = clz; } public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) { // If not, instantiate and add it to the activity mFragment = (TabFragment) Fragment.instantiate( mActivity, mClass.getName()); mFragment.setProviderId(mTag); // id for event provider ft.add(android.R.id.content, mFragment, mTag); } else { // If it exists, simply attach it in order to show it ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { // Detach the fragment, because another one is being attached ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { // User selected the already selected tab. Usually do nothing. } } 

我认为TabActivity不赞成使用Fragments – 不是因为标签导航是一个弃用的概念。 只需使用Fragments和TabWidget。

此外,这是一个类似的问题 。

编辑:

以下是Google提供的一个示例: Android标签片段方式