11

enter image description here的Android动作条夏洛特与标签

我试图与低于标签来实现动作条夏洛特如图在上述引线框架。

我应该使用TabActivity? - 因为我看到它已被弃用。这是实现这一目标的最佳途径。

+0

你可以分享答案 –

回答

25

我实现了这个功能用SherlockFragmentActivity为TabView的容器中,用SherlockFragment的标签。这里是一个草图(我省略了通常的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<TabFragment1>(
       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<TabFragment2>(
       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<T extends Fragment> implements ActionBar.TabListener{ 
    private TabFragment mFragment; 
    private final Activity mActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    public TabListener(Activity activity, String tag, Class<T> 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. 
    } 
} 
+0

我们如何在操作栏添加共享按钮到harsha mv的问题。 –

+0

@suresh:这是一个不同的问题。请参阅[与此相关的问题](http://stackoverflow.com/q/10278952/620338)。 –

+0

@MattHandy我想添加Tabs以及ActionBar Iteams。那么你的解决方案的工作? –

相关问题