2012-08-29 45 views
1

嗨,我需要在我的應用程序中實現ActionBar,但我還沒有從哪裏開始理解。ActionBar,從Android 2.3.3佈局帶碎片的XML

這個例子,我希望得到
link

我已經測試ShareLock和其他的東西,但我不能成功地執行這些例子,我需要用碎片得到這樣的結果,並應該有4個選項卡。我已經使用android-support-v4.jar

這是我使用的Fragment Utils。

public class TabManager implements TabHost.OnTabChangeListener { 
    private final FragmentActivity mActivity; 
    private final TabHost mTabHost; 
    private final int mContainerId; 
    private final HashMap<String, TabInfo> mTabs = new HashMap<String, TabInfo>(); 
    TabInfo mLastTab; 

    static final class TabInfo { 
    private final String tag; 
    private final Class<?> clss; 
    private final Bundle args; 
    private Fragment fragment; 

    TabInfo(String _tag, Class<?> _class, Bundle _args) { 
     tag = _tag; 
     clss = _class; 
     args = _args; 
    } 
} 

static class DummyTabFactory implements TabHost.TabContentFactory { 
    private final Context mContext; 

    public DummyTabFactory(Context context) { 
     mContext = context; 
    } 

    @Override 
    public View createTabContent(String tag) { 
     View v = new View(mContext); 
     v.setMinimumWidth(0); 
     v.setMinimumHeight(0); 
     return v; 
    } 
} 

public TabManager(FragmentActivity activity, TabHost tabHost, int containerId) { 
    mActivity = activity; 
    mTabHost = tabHost; 
    mContainerId = containerId; 
    mTabHost.setOnTabChangedListener(this); 
} 

public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { 
    tabSpec.setContent(new DummyTabFactory(mActivity)); 
    String tag = tabSpec.getTag(); 

    TabInfo info = new TabInfo(tag, clss, args); 

    // Check to see if we already have a fragment for this tab, probably 
    // from a previously saved state. If so, deactivate it, because our 
    // initial state is that a tab isn't shown. 
    info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); 
    if (info.fragment != null && !info.fragment.isDetached()) { 
     FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
     ft.detach(info.fragment); 
     ft.commit(); 
    } 

    mTabs.put(tag, info); 
    mTabHost.addTab(tabSpec); 
} 

@Override 
public void onTabChanged(String tabId) { 

    TabInfo newTab = mTabs.get(tabId); 
    FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); 
    if (mLastTab != newTab) { 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 
     if (mLastTab != null) { 
      if (mLastTab.fragment != null) { 
       ft.detach(mLastTab.fragment); 
      } 
     } 
     fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     if (newTab != null) { 
      if (newTab.fragment == null) { 
       newTab.fragment = Fragment.instantiate(mActivity, 
         newTab.clss.getName(), newTab.args); 
       ft.add(mContainerId, newTab.fragment, newTab.tag); 
      } else { 
       ft.attach(newTab.fragment); 
      } 
     } 
     mLastTab = newTab; 
     ft.commit(); 
     mActivity.getSupportFragmentManager().executePendingTransactions(); 
    } 
} 

}

和一些更....

public class FragmentsUtils { 
private static String DIALOG_TAG = "dialog_tag"; 

/*public static MyAlertDialogFragment showDialog(FragmentManager fragmentManager, int id) { 
    // DialogFragment.show() will take care of adding the fragment 
    // in a transaction. We also want to remove any currently showing 
    // dialog, so make our own transaction and take care of that here. 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 
    Fragment prev = fragmentManager.findFragmentByTag(DIALOG_TAG); 
    if (prev != null) { 
     ft.remove(prev); 
    } 

    //  ft.addToBackStack(null); 

    // Create and show the dialog. 
    MyAlertDialogFragment newFragment = MyAlertDialogFragment.newInstance(id); 
    newFragment.show(ft, DIALOG_TAG); 
    return newFragment; 
}*/ 

public static void swapFragments(FragmentManager fragmentManager, int containerViewId, Fragment newFragment, String fragmentTag) { 

    if (fragmentManager == null) 
     return; 
    View newFragmentMainView = newFragment.getView(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    //  fragmentTransaction.replace(containerViewId, fragment); 

    if (fragmentTag == null || fragmentTag.length() < 1) 
     fragmentTransaction.add(containerViewId, newFragment); 
    else 
     fragmentTransaction.add(containerViewId, newFragment, fragmentTag); 

    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    fragmentTransaction.commit(); 
} 

public static void swapFragments(FragmentManager fragmentManager, int containerViewId, Fragment newFragment) { 
    swapFragments(fragmentManager, containerViewId, newFragment, null); 
} 

} 

提前感謝...

回答

1

ActionBar只能從API 11(3)上可用。如果您嘗試在API 10(2.3.3 - 2.3.7)上的設備上運行使用ActionBar的應用程序,它將不可見。

如果你需要一個ActionBar在您的應用程序(本質上是一個強大的產品,以標籤),並計劃針對API 10臺或更早的設備,你可以看看android-actionbarActionBarSherlock