2015-07-04 9 views
5

Używam kart stron podglądu i paska zadań (4 karty). Po uruchomieniu głównej operacji ładuje dane 4 fragmentów.Jak załadować akcję fragmentu oncreate() wybranej karty akcji tylko, jeśli wybrano tę kartę?

jak załadować tylko wybrane dane karty?

Również po wybraniu zakładki 1 ładowane są tab1 i tab0.

Jeśli przesuń palcem między tab0 i tab1, onstart() dla obu kart nie wywołanych.

Jeśli wybiorę tab2, a następnie wybierz tab0, onstart() dla obciążeń tab0.

Jeśli przesunąć palcem między tab2 i tab3, onstart() dla obu kart nie wywołanych.

MainActivity.java

MainPagerAdapter tabsPagerAdapter; 
ViewPager viewPager; 
ActionBar actionBar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    tabsPagerAdapter = new MainPagerAdapter(getSupportFragmentManager()); 
    viewPager.setAdapter(tabsPagerAdapter); 

    actionBar = getSupportActionBar(); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 


    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.doros)).setTabListener(this)); 
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.esteshara)).setTabListener(this)); 
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.aswak)).setTabListener(this)); 
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.akhbar)).setTabListener(this)); 


    viewPager.setOffscreenPageLimit(0); 


    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    getSupportActionBar().setCustomView(R.layout.abs_layout); 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

    viewPager.setCurrentItem(3); 



} 

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 

} 


@Override 
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 

} 

MainPageAdapter.java

public class MainPagerAdapter extends FragmentPagerAdapter implements PagerSlidingTabStrip.IconTabProvider{ 

public MainPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public int getCount() { 
    return 4; 
} 

private int[] tabIcons = { 
     R.drawable.ar, 
     R.drawable.ar, 
     R.drawable.ar, 
     R.drawable.ar 
}; 



@Override 
public android.support.v4.app.Fragment getItem(int position) { 
    switch (position) 
    { 
     case 3: return new NewsFragment(); 
     case 1: return new ConsultationFragment(); 
     case 2: return new IndecesFragment(); 
     case 0: return new LessonsFragment(); 
     default: return null; 
    } 
} 



@Override 
public int getPageIconResId(int i) { 
    return tabIcons[i]; 
} 

}

Znalazłem ten link, ale nie jest pomocny link

+1

W tym celu działa pagerAdapter, dlatego musisz ustawić własną logikę, aby temu zapobiec, np. Przyjąć wartość boolowską dla czterech fragmentów i włączyć ją po wybraniu karty. I załaduj fragmenty na podstawie TRUE lub FALSE. –

+0

Próbowałem, ale problem polega na tym, że po wybraniu zakładki jego aktywność fragmentu onresume() lub oncreate nie jest wywoływana. – Mohammad

Odpowiedz

1

Mam rozwiązać problem.

Utworzono zmienną statyczną do przechowywania wybranego indeksu kart.

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
    sharedVariables.setSelectedTab(tab.getPosition()); 

Od Viewpager ładuje wybraną stronę i lewą stronę i prawą stronę, jeśli one istnieją każdym razem, gdy strona zmieniła, więc zastępują tę funkcję, aby sprawdzić, czy ten fragment jest jeden widoczny dla użytkownika, a następnie zadzwonić onresume metoda.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
      onResume(); 
    } else { 
     // Do your Work 
    } 
} 
+1

Aby dodać do tego, powiem, nie wywołuj onResume() bezpośrednio, co masz w swoim e-mailu w metodzie i wywołaj to, a także wywołaj tę metodę w swojej przeglądarce, aby działała normalnie. – Elltz

+0

Proszę nie wzywać onResume(), jest to metoda, która jest już wywoływana przez Androida i powinna być zarezerwowana dla systemu. Ryzykujesz, że Twój Fragment będzie niespójny, jeśli zadzwonisz do tych metod. –

1

Z ViewPager zawsze rozszerzam Fragment setMenuVisibility(). Jest wywoływany z true, gdy Fragment jest widoczny, a przy fałszywy, gdy nie jest. Gdy jest widoczny, możesz wykonać wszystkie potrzebne czynności.