Navegação Tabs Android 4 por Activity

349 views
Skip to first unread message

Felipe Costa

unread,
Mar 7, 2013, 6:59:45 AM3/7/13
to androidb...@googlegroups.com
Pessoal,

Anteriormente para navegar entre tabs possui-a a classe TabActivity da seguinte forma:

public class TabHostTeste extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
          
            TabHost tabHost = getTabHost();  // The activity TabHost
            tabHost = getTabHost();  // The activity TabHost
            TabHost.TabSpec spec;  // Resusable TabSpec for each tab
            Intent intent;  // Reusable Intent for each tab
           
            // Initialize a TabSpec for each tab and add it to the TabHost
            intent = new Intent().setClass(this, Teste1CadActivity.class);
            spec = tabHost.newTabSpec("Teste1").setIndicator("Aba Teste 1").setContent(intent);
            tabHost.addTab(spec);

            // Initialize a TabSpec for each tab and add it to the TabHost
            intent = new Intent().setClass(this, Teste2CadActivity.class);
            spec = tabHost.newTabSpec("Teste2").setIndicator("Aba Teste 2").setContent(intent);
            tabHost.addTab(spec);
    }
}

Porem ao criar um novo projeto com a versão 4 do android, é informado que a classe TabActivity esta "deprecated", na documentação http://developer.android.com/guide/topics/ui/actionbar.html parece que agora deve ser utilizado a ActionBar e implementar a classe ActionBar.TabListener.

@Override
protected void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);
   
// Notice that setContentView() is not used, because we use the root
   
// android.R.id.content as the container for each fragment

   
// setup action bar for tabs
   
ActionBar actionBar = getActionBar();
    actionBar
.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar
.setDisplayShowTitleEnabled(false);

   
Tab tab = actionBar.newTab()
           
.setText(R.string.artist)
           
.setTabListener(new TabListener<ArtistFragment>(
                   
this, "artist", ArtistFragment.class));
    actionBar
.addTab(tab);

    tab
= actionBar.newTab()
       
.setText(R.string.album)
       
.setTabListener(new TabListener<AlbumFragment>(
               
this, "album", AlbumFragment.class));
    actionBar
.addTab(tab);
}

public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
   
private Fragment mFragment;
   
private final Activity mActivity;
   
private final String mTag;
   
private final Class<T> mClass;

   
/** Constructor used each time a new tab is created.
      * @param activity  The host Activity, used to instantiate the fragment
      * @param tag  The identifier tag for the fragment
      * @param clz  The fragment's Class, used to instantiate the fragment
      */

   
public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity
= activity;
        mTag
= tag;
        mClass
= clz;
   
}

   
/* The following are each of the ActionBar.TabListener callbacks */

   
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
= Fragment.instantiate(mActivity, mClass.getName());
            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.
   
}
}

Sendo assim gostaria de saber se para utilizar estas abas no Android 4 é necessario alterar todas as Activity em Fragment? Não é possivel utilizar minha estrutura anterior mantendo minhas Activity's para navegação?

Bruno Albuquerque

unread,
Mar 8, 2013, 9:23:55 AM3/8/13
to androidb...@googlegroups.com
Você precisa usar Fragments. Essa é a forma recomendada atualmente de qualquer forma.



2013/3/7 Felipe Costa <feli...@gmail.com>


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Felipe Costa

unread,
Mar 8, 2013, 9:25:24 AM3/8/13
to androidb...@googlegroups.com
Bruno,

Obrigado pela resposta,o meu problema esta sendo o seguinte, possuo um projeto o qual não utilizo Fragment, minhas telas são Activity, sendo assim utilizava a TabActivity para navegação entre abas, apos alterar o projeto para Android 4 e informado que a classe TabActivity esta deprecada, sendo assim o que me recomendaria?

2013/3/8 Bruno Albuquerque <bruno.al...@gmail.com>

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/E8SWmg-_54A/unsubscribe?hl=en-US.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Att,
Felipe Costa

Bruno Albuquerque

unread,
Mar 8, 2013, 9:31:24 AM3/8/13
to androidb...@googlegroups.com
Você śo tem duas opções. Ignorar o aviso de deprecation (vai funcionar ainda agora, mas no futuro não mais) ou mudar pra Fragment. Eu recomendo mudar pra Fragment (eventualmente você vai ter que fazer isso se quiser usar a classe nova).



2013/3/8 Felipe Costa <feli...@gmail.com>

Felipe Costa

unread,
Mar 8, 2013, 9:41:36 AM3/8/13
to androidb...@googlegroups.com
Bruno,

Deixei a primeira opção em segundo plano, o meu medo é o "(vai funcionar ainda agora, mas no futuro não mais) ". Possuo uma versão com a qual converti estas Activity para Fragment, porem sempre que altero de aba os metodos onCreateView e onActivityCreated são executados, porem as funcionalidades que estavam no onCreate de minha activity implementei elas no onActivityCreated do Fragment, sendo assim ao alterar as abas estou perdendo minhas informações, como poderia solucionar este problema?

Bruno Albuquerque

unread,
Mar 8, 2013, 11:49:38 AM3/8/13
to androidb...@googlegroups.com

Felipe Costa

unread,
Mar 8, 2013, 11:56:40 AM3/8/13
to androidb...@googlegroups.com
Bruno,

Muito obrigado pelos esclarecimentos, realmente estou meio perdido com Fragment, irei dar uma aprofundada no Ciclo de Vida para validar a solução do meu problema.

2013/3/8 Bruno Albuquerque <bruno.al...@gmail.com>



--
Att,
Felipe Costa

Deivison Servat Sporteman

unread,
Mar 8, 2013, 11:57:02 AM3/8/13
to androidb...@googlegroups.com

Felipe Costa

unread,
Mar 11, 2013, 7:55:41 AM3/11/13
to androidb...@googlegroups.com
Ola Deivison,

Obrigado pela dica!

2013/3/8 Deivison Servat Sporteman <deivison....@gmail.com>



--
Att,
Felipe Costa
Reply all
Reply to author
Forward
0 new messages