Ver mensagens sem resposta | Ver tópicos ativos Hoje é 18 Nov 2019, 10:18



Responder Tópico  [ 1 Mensagem ] 
 ActionBar com Tabs, Fragment e ViewPager 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2735
Localização: Rio de Janeiro
Mensagem ActionBar com Tabs, Fragment e ViewPager
Usar tabs com actionbar e viewpager é um bom layout pra uma tela inicial. O ViewPager é um container que nos permite navegar entre duas ou mais telas, um recurso bem útil que também pode ser usado em versões antigas por estar na biblioteca de suporte v4.
A classe HomeActivity será a única activity, junto com dois fragments que serão usados em cada aba e um adapter pra eles. Os layouts.

home_activity

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/home_activity_viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.v4.view.ViewPager>
 


container

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

   
    <TextView
        android:id="@+id/contaner_textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </TextView>
   
</LinearLayout>
 


PagerAdapter

package br.lanzieri.actionbartabs.fragment;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/**
 * @author Kaito
 *
 */

public class PagerAdapter extends FragmentPagerAdapter {
   
    @Override
    public int getCount() {
        return 2;
    }
   
    @Override
    public Fragment getItem(int position) {
        Fragment frag = null;
       
        switch (position) {
        case 0 : frag = new MovieFragment();
            break;
        case 1 : frag = new MusicFragment();
            break;
        }
        return frag;
    }
   
    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }
   
}
 


O getCount() deve retornar o número de fragments que serão usados, nesse caso apenas dois. No getItem() usamos a variável position no switch pra definir qual fragment será escolhido. Como esse adapter será usado pelo ViewPager, diferente de outras views/containers que usam BaseAdapter, ele deverá herdar de FragmentPagerAdapter.

MovieFragment

package br.lanzieri.actionbartabs.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import br.lanzieri.actionbartabs.R;

/**
 * @author Kaito
 *
 */

public class MovieFragment extends Fragment {
   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.container, container, false);
       
        TextView textview = (TextView) view.findViewById(R.id.contaner_textview);
        textview.setText("Fragment com meus filmes");
       
        return view;
    }
   
}
 


MusicFragment

package br.lanzieri.actionbartabs.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import br.lanzieri.actionbartabs.R;

/**
 * @author Kaito
 *
 */

public class MusicFragment extends Fragment {
   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.container, container, false);
       
        TextView textview = (TextView) view.findViewById(R.id.contaner_textview);
        textview.setText("Fragment com minhas músicas");
       
        return view;
    }
   
}
 


Por último, a activity.

HomeActivity

package br.lanzieri.actionbartabs.activity;

import android.app.ActionBar;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;

import br.lanzieri.actionbartabs.R;
import br.lanzieri.actionbartabs.fragment.PagerAdapter;

/**
 * @author Kaito
 *
 */

public class HomeActivity extends FragmentActivity implements OnPageChangeListener, TabListener {
   
    private ActionBar actionbar;
    private ViewPager viewpager;
   
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.home_activity);
       
        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
       
        viewpager = (ViewPager) findViewById(R.id.home_activity_viewpager);
        viewpager.setAdapter(adapter);
        viewpager.setOnPageChangeListener(this);
       
        actionbar = getActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        Tab movie = actionbar.newTab().setText("Filmes").setTabListener(this);
        Tab music = actionbar.newTab().setText("Músicas").setTabListener(this);
       
        actionbar.addTab(movie);
        actionbar.addTab(music);
    }
   
    /* TabListener */
    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        //...
    }
   
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Muda o fragment do ViewPager ao selecionar
        // uma nova aba
        viewpager.setCurrentItem(tab.getPosition());
    }
   
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        //...
    }
   
    /* OnPageChangeListener */
    @Override
    public void onPageScrollStateChanged(int state) {
        //...
    }
   
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //...
    }
   
    @Override
    public void onPageSelected(int position) {
        // Muda a aba selecionada ao trocar de fragment
        // com o ViewPager
        actionbar.setSelectedNavigationItem(position);
    }
   
}
 


É bem simples, mas dependendo do projeto que será usado pode deixar um visual bem bacana.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


25 Abr 2015, 15:37
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 1 Mensagem ] 

Quem está online

Usuários vendo este fórum: adautox, alansousa, alberto, alex, Alexandre de Queiroz, alexandreufcg, alexsander.miranda, AT-AT, Berbert, Biel, BiG_SerGiO, BloggerCaOS, brazucx, breko, brenda, brian15, careisjr, carlos.macleod, cassiano, CKorneLL, cleberkct, Cleiton, deborazb, Demerval, Dirceu W. C. Conte, dkclan, Dookan, Dudi_FC, elisa, Erik Patekoski, erissi, espinhara.net, everaldo, faco, fernandofsf, flaviolemos, francismarconcini, furlanrapha, Gabriel, Gabriel Laet, gapler, geeks, gphonemania, guiba_picolino, gusrp, gutomilani, Heritrix, HyagoRules, ICCrawler - ICjobs, Igor_M, inesfg, ismavolk, itsN, j-menezes, jasn, jcorreajr, JuniorE, Ki-Adi-Mundi, kidush, klyff, konos, kpinheiro, lafamac, lanlan, laucode, leonardodamata, lucianoedipo, luiz.lago, m4v0, madeinnordeste, marcelocastellani, marciosoliveira, marcow, marinho5, marlovich, mauriciomag, maurosilva, maximilianjx, Maxtremus, mcurtis, MpassosT, MSN NewsBlogs, n3t0, neiesc, NeruLL, niloleite, nirvana, nivea, obitow, pabarbosa, pamonteiro, paulabr, paulosantos, peixe, pemam.com.br, pgsnit, Philipe Alves, phobos, pmzara, rbenatti, renanpl, ricardo, Roberto, rogerio.alcantara, rubens_olv, ruizsa, Samuka, siker C3PO, srsilveira, tchou, ThiMatsu, Tognoli, tonholis, tonylock, Velhinho, W3 [Sitesearch], weber, Yoshihury, zenden1503, zorieuq e 3 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi