Autore Topic: viewPager in Fragment diversi  (Letto 471 volte)

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
viewPager in Fragment diversi
« il: 12 Maggio 2017, 15:00:42 CEST »
0
L'applicazione presenta una Activity principale contenente diversi Fragment, in due di questi ho creato due viewPager diversi.
Quando premo sulla NavigationDrawer il pulsante relativo al Fragment questo viene aperto correttamente, quando però premo sul secondo l'adapter non viene aggiornato e viene visualizzata sempre la stessa viewPager, viceversa se apro prima la seconda.

Codice gestione pulsanti:
Codice (Java): [Seleziona]
case R.id.id_percentuale:
                        tabLayout.setVisibility(View.VISIBLE);
                        viewPager.setVisibility(View.VISIBLE);
                        viewPager.setAdapter(viewPagerAdapterPercentuale);
                        tabLayout.setupWithViewPager(viewPager);
                        sTitle = "Percentuale";
                        actionBar.setTitle(sTitle);
                        //item.setChecked(true);
                        drawerLayout.closeDrawers();
                        break;
                    case R.id.id_massa:
                        tabLayout.setVisibility(View.VISIBLE);
                        viewPager.setVisibility(View.VISIBLE);
                        viewPager.setAdapter(viewPagerAdapterMassa);
                        tabLayout.setupWithViewPager(viewPager);
                        sTitle = "Massa";
                        actionBar.setTitle(sTitle);
                        //item.setChecked(true);
                        drawerLayout.closeDrawers();
                        break;
                }

Cercando anche sulla documentazione ho trovato questo metodo:
https://developer.android.com/reference/android/support/v4/view/ViewPager.OnAdapterChangeListener.html

Potrebbe essere la soluzione? Se si, come devo gestirlo?

Grazie in anticipo per l'aiuto.

Offline tonno16

  • Utente storico
  • *****
  • Post: 1233
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:viewPager in Fragment diversi
« Risposta #1 il: 12 Maggio 2017, 15:44:05 CEST »
0
Ma in entrambi i casi non c'è differenza se non il totlo di actionbar, è normaleche non succeda niente.

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:viewPager in Fragment diversi
« Risposta #2 il: 14 Maggio 2017, 17:04:31 CEST »
0
Ma in entrambi i casi non c'è differenza se non il totlo di actionbar, è normaleche non succeda niente.

Ma quando faccio
Codice (Java): [Seleziona]
viewPager.setAdapter()
su uno do "viewPagerAdapterPercentuale", mentre sull'altro "viewPagerAdapterMassa". Non dovrebbe caricarmi o uno o l'altro?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1233
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:viewPager in Fragment diversi
« Risposta #3 il: 14 Maggio 2017, 22:31:19 CEST »
0
No. E nel codice che hai messo te fai cose non sensate. Tipo settare ladapter 2 volte e settare il viewpager due volte

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:viewPager in Fragment diversi
« Risposta #4 il: 16 Maggio 2017, 14:51:14 CEST »
0
Riprovando ho trovato questa soluzione che funziona proprio come volevo:

Codice (Java): [Seleziona]
                    case R.id.id_percentuale:
                        visibility(true, item);
                        viewPagerPercentuale.setAdapter(viewPagerAdapterPercercentuale);
                        tabLayoutPercentuale.setupWithViewPager(viewPagerPercentuale);
                        sTitle = "Percentuale";
                        actionBar.setTitle(sTitle);
                        //item.setChecked(true);
                        drawerLayout.closeDrawers();
                        break;
                    case R.id.id_massa:
                        visibility(true, item);
                        viewPagerMassa.setAdapter(viewPagerAdapterMassa);
                        tabLayoutMassa.setupWithViewPager(viewPagerMassa);
                        sTitle = "Massa";
                        actionBar.setTitle(sTitle);
                        //item.setChecked(true);
                        drawerLayout.closeDrawers();
                        break;

Codice (Java): [Seleziona]
public boolean visibility(boolean visibility, MenuItem item) {
        if (visibility) {
            switch (item.getItemId()) {
                case R.id.id_percentuale:
                    tabLayoutMassa.setVisibility(View.GONE);
                    viewPagerMassa.setVisibility(View.GONE);
                    tabLayoutPercentuale.setVisibility(View.VISIBLE);
                    viewPagerPercentuale.setVisibility(View.VISIBLE);
                    break;
                case R.id.id_massa:
                    tabLayoutMassa.setVisibility(View.VISIBLE);
                    viewPagerMassa.setVisibility(View.VISIBLE);
                    tabLayoutPercentuale.setVisibility(View.GONE);
                    viewPagerPercentuale.setVisibility(View.GONE);
                    break;
                default:
                    tabLayoutPercentuale.setVisibility(View.GONE);
                    viewPagerPercentuale.setVisibility(View.GONE);
                    tabLayoutMassa.setVisibility(View.GONE);
                    viewPagerMassa.setVisibility(View.GONE);
                    break;
            }
        } else {
            tabLayoutPercentuale.setVisibility(View.GONE);
            viewPagerPercentuale.setVisibility(View.GONE);
            tabLayoutMassa.setVisibility(View.GONE);
            viewPagerMassa.setVisibility(View.GONE);
        }
        return visibility;
    }