2015-07-04 11 views
5

मैं व्यूपर और एक्शनबार टैब (4 टैब) का उपयोग कर रहा हूं। जब मुख्य गतिविधि शुरू होती है, तो यह 4 टुकड़े डेटा लोड करती है।टैब चयनित होने पर केवल एक्शनबार चयनित टैब की खंड गतिविधि ऑनक्रेट() विधि को लोड करने के लिए कैसे करें?

इसे केवल चयनित टैब डेटा कैसे लोड करें?

जब भी मैं टैब 1, टैब 1 और टैब 0 लोड का चयन करता हूं।

यदि मैं दोनों टैब के लिए टैब 0 और टैब 1, ऑनस्टार्ट() के बीच स्वाइप करता हूं।

यदि मैं टैब 2 का चयन करता हूं और फिर टैब 0 लोड के लिए टैब 0, ऑनस्टार्ट() का चयन करता हूं।

यदि मैं दोनों टैब के लिए टैब 2 और टैब 3, ऑनस्टार्ट() के बीच स्वाइप करता हूं।

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]; 
} 

}

मैं इस लिंक मिल गया है, लेकिन इसकी सहायक link

+1

यह है कि पेजर एडाप्टर कैसे काम करता है, आपको इसे रोकने के लिए अपने तर्क को सही करना होगा, जैसे कि चार टुकड़ों के लिए बूलियन मान लें, और टैब का चयन करते समय उन्हें सक्षम करें। और सही या गलत पर आधारित टुकड़े लोड करें। –

+0

मैंने कोशिश की, लेकिन समस्या यह है कि जब मैं एक टैब का चयन करता हूं, तो इसकी खंड गतिविधि ऑन्रेस्यूम() या ऑनक्रेट को नहीं कहा जाता है। – Mohammad

उत्तर

1

मैं समस्या हल नहीं।

मैंने चयनित टैब इंडेक्स को स्टोर करने के लिए एक स्थिर चर बनाया है।

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

अगर वे हर बार पृष्ठ बदल मौजूद बाद से Viewpager चयनित पृष्ठ और बाईं पेज और सही पृष्ठ को लोड करता है, इसलिए मैं अगर यह टुकड़ा एक उपयोगकर्ता को दिखाई और फिर onresume कहते हैं की जाँच करने के लिए इस समारोह को ओवरराइड तरीका।

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

इसमें जोड़ने के लिए मैं कहूंगा कि रीज्यूम() पर सीधे कॉल करें जो आपके ऑर्रेस्यूम में आपके पास कभी भी एक विधि में डाला गया है और इसके बजाय कॉल करें और उस विधि को अपने ऑन्रेस्यूम में भी कॉल करें ताकि यह सामान्य – Elltz

+0

काम करे, कृपया रेस्यूम पर कॉल न करें(), यह एक तरीका है जिसे पहले ही एंड्रॉइड द्वारा बुलाया गया है और इसे सिस्टम के लिए आरक्षित किया जाना चाहिए। यदि आप उन तरीकों को बुलाते हैं तो आपको एक असंगत स्थिति में अपना टुकड़ा उठाना पड़ता है। –

1

व्यूपेजर के साथ मैं हमेशा फ्रैगमेंट setMenuVisibility() का विस्तार करता हूं। इसे सच के साथ कहा जाता है जब Fragment दिखाई दे रहा है, और झूठी के साथ जब यह नहीं है। जब यह दिखाई देता है, तो आप अपने सभी कार्यों को कर सकते हैं।

संबंधित मुद्दे