Autore Topic: viewpager e tab  (Letto 467 volte)

Offline imugno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 4
  • Sistema operativo:
    Windows 7
viewpager e tab
« il: 25 Giugno 2013, 17:22:16 CEST »
0
Salve a tutti!
Sto cercando di imparare a programmare decentemente per android, già avevo fatto un app con 3 tabs in alto e un altra cono 3 fragment e il viewpager che mi permetteva di sfogliarle. Adesso volevo unire le due cose!
Un unico problema: mentre premendo un tab si avvia l'animazione dello sfogliamento delle pagine fino a quella selezionata, se sfoglio le pagine con il pollicione (lo swap con il dito da destra a sinistra, per intendersi), invece il tab evidenziato non cambia! Non so se mi spiego, io sfoglio fino a pagina 3, ma per il tab in alto sono ancora alla uno!!

Codice (Java): [Seleziona]
import android.os.Bundle;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.example.sfogliapagine.R;

public class MainActivity extends SherlockFragmentActivity
                                                  implements ActionBar.TabListener {
   
    private static final int NUM_PAGES = 3;     //numero pagine
    private ViewPager mPager;   //animazione pagine
    private PagerAdapter mPagerAdapter; //passa le pagine a ViewPager

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                //TODO: <--------------------- qui pensavo di cambiare il tab selezionato quando sfoglio.... in qualche modo xD
            }
        });
       
        //nascondo il menu
        getSupportActionBar().setDisplayShowHomeEnabled(false);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        //sistemo i tab
        ActionBar bar = getSupportActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab t1 = bar.newTab();
        t1.setContentDescription("1")
          .setText("Spada")
                  .setIcon(R.drawable.ic_sword)
                  .setTabListener(this);
        bar.addTab(t1);
        ActionBar.Tab t2 = bar.newTab();
        t2.setContentDescription("2")
          .setText("Scudo")
                  .setIcon(R.drawable.ic_shield)
                  .setTabListener(this);
        bar.addTab(t2);
        ActionBar.Tab t3 = bar.newTab();
        t3.setContentDescription("3")
          .setText("Scettro")
                  .setIcon(R.drawable.ic_staff)
                  .setTabListener(this);
        bar.addTab(t3);
    }
    // gestione page adapter
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
            super(fm);
        }

        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            return TestFragment.create(position);
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }
   
  //gestione tab
    @Override
    public void onTabReselected(Tab tab, FragmentTransaction transaction) {
    }
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction transaction) {
        mPager.setCurrentItem(Integer.valueOf(tab.getContentDescription().toString())-1); //se premo un tab mi sfoglia a quella pagina
    }
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    }
}
Mi rendo conto che questa può non essere la soluzione più "elegante", ma a logica l'ho pensata così..... Suggerimenti ben accetti!! :D

A intuito metterei un comando del tipo "getSupportActionBar().selectTab(...)" nel punto dove ho messo il TODO (al metodo onPageSelected) ma si potrebbe anche mettere dentro al fragment, nel metodo onAttach.... ma mi pare ancora meno agile gestire l'actionBar da lì.....
Il problema principale è che non so come riutilizzare i tab che ho dichiarato in onCreate del MainActivity, ho provato a buttare giù un po' di codice, ma a Eclipse non gliene va bene una .-. (per esempio, a mettere "public ActionBar bar = getSupportActionBar();" smatta....)

E poi, mi viene in mente adesso, con il metodo selectTab riparte di nuovo anche il metodo onTabSelected della gestione dei tab?? C'è un comando che mi consente di evidenziare il tab in altro modo?

Offline imugno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 4
  • Sistema operativo:
    Windows 7
Re:viewpager e tab
« Risposta #1 il: 02 Luglio 2013, 18:46:59 CEST »
0
nessuno nessuno a darmi manina?  :'(

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:viewpager e tab
« Risposta #2 il: 02 Luglio 2013, 23:22:19 CEST »
+1
Quello che cerchi è
Codice (Java): [Seleziona]
public void onPageSelected(int position) {
      getSupportActionBar().setSelectedNavigationItem(position);
}

Un'altra cosa che non mi è chiara:
Codice (Java): [Seleziona]
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
        mPager.setCurrentItem(Integer.valueOf(tab.getContentDescription().toString())-1); //se premo un tab mi sfoglia a quella pagina
 }

Non sarebbe meglio ?
Codice (Java): [Seleziona]
mPager.setCurrentItem(tab.getPosition());

Offline imugno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 4
  • Sistema operativo:
    Windows 7
Re:viewpager e tab
« Risposta #3 il: 02 Luglio 2013, 23:59:37 CEST »
0
Mio dio, grazie mille!! Funziona alla perfezione adesso!!
Grazie grazie grazie!!  ;-)