11

enter image description hereAndroid ActionBar Sherlock con linguette

sto cercando di attuare ActionBar Sherlock con linguette inferiori che, come mostrato nella gabbia metallica sopra.

Devo usare TabActivity? - da quando ho visto che è deprecato. Qual è il modo migliore per ottenere lo stesso.

+0

puoi condividere la risposta –

risposta

25

ho implementato questa funzionalità con un SherlockFragmentActivity come contenitore di visualizzazione a scheda e con SherlockFragment come schede. Ecco uno schizzo (ho omesso la solita roba attività di Android):

Questa è l'attività TabView con due schede:

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); 
    } 
} 

E questo è il TabFragment che contiene il contenuto di una scheda:

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; 
    } 

} 

E infine questo è il TabListener che gestisce gli interruttori della scheda:

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

Come possiamo aggiungere il pulsante share alla barra delle azioni alla domanda di harsha mv? –

+0

@suresh: questo è un altro problema. Vedi [questa domanda correlata] (http://stackoverflow.com/q/10278952/620338). –

+0

@MattHandy voglio aggiungere Tabs e ActionBar Iteams. così la tua soluzione funzionerà? –

4

Credo che TabActivity sia deprecato a favore dell'utilizzo di Fragments - non perché la navigazione delle schede è un concetto deprecato. Basta usare Fragments e un TabWidget.

Inoltre, ecco a similar question.

Edit:

Ecco un esempio per gentile concessione di Google: Android Tabs the Fragment Way

Problemi correlati