33

मैं टुकड़ा के अंदर एक viewPager जरूरत अंदर ViewPager निर्धारित करते हैं, लेकिन मैं दो टुकड़े है, टुकड़ा 1 मेरे मेनू, और टुकड़ा दो मैं एक ViewPagerIndicator उपयोग करना चाहते हैं ...कैसे एक टुकड़ा

लेकिन एक है टुकड़े में एक और टुकड़ा नहीं हो सकता ... मुझे इसके लिए क्या करने की ज़रूरत है?

enter image description here

उत्तर

71

एंड्रॉइड 4.2 में शुरू, घोंसला वाले टुकड़े हैं। http://developer.android.com/about/versions/android-4.2.html#NestedFragments समर्थन लाइब्रेरी में अब पुराने एंड्रॉइड संस्करणों के लिए इसके लिए समर्थन भी शामिल है।

तो आपको कुछ इस तरह कर सकते हैं:

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager); 
    mViewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 
    } 

पूर्ण कार्यान्वयन यहाँ उपलब्ध है: https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments

+0

लेकिन यह संभव नहीं है क्योंकि मैं अपने टुकड़े 2 के अंदर एक फ्रैगमेंट एक्टिविटी नहीं डाल सकता, क्योंकि खंड माता-पिता एक फ्रैगमेंट एक्टिविटी है, और बच्चे (खंड 2) को एक टुकड़ा होना आवश्यक है टैब हैं .. और github उदाहरण में एक अन्य टुकड़े के अंदर एक टुकड़ा नहीं डालते हैं। –

+0

आपको टुकड़े 1 की आवश्यकता क्यों है? क्या आपके पास सिर्फ एक दर्शक नहीं है जो अलग-अलग टुकड़ों का संदर्भ देता है और फिर इसके नीचे टुकड़ा 2 है? –

+0

लेकिन खंड 1 हमेशा समान होता है और यह परिवर्तनों की तरह दिखता है, और यह नहीं चाहता .. कुछ विचार? –

0
Android समर्थन V4 पुस्तकालय के साथ

, तो आप एक टुकड़ा अंदर एक टुकड़ा जोड़ सकते हैं। इसका उपयोग करने का प्रयास करें, यह आपकी समस्या का समाधान कर सकता है।

+1

करने की कोशिश लेकिन क्योंकि मैं नहीं मेरा टुकड़ा 2 के अंदर एक FragmentActivity डाल संभव नहीं है, क्योंकि टुकड़ा माता पिता एक FragmentActivity, और बच्चे है (खंड 2) को एक टुकड़ा होना आवश्यक है टैब रखने के लिए सक्रियता .. कुछ विचार? –

+0

ओह, लेकिन प्रतीक्षा करें, आप केवल टुकड़े के बिना एक टुकड़े में 2 टुकड़े डाल सकते हैं सक्रियता, आप जानते हैं? या हो सकता है कि आपके पास ऐसा करने के आपके कारण हैं ... –

0

पढ़ें कुछ उदाहरण के बाद, आप नहीं कर सकते एक fragmentActivity अंदर एक FragmentActivity है। दो टुकड़े रखने के लिए necesary नहीं है और यह एक FragmentPageAdapter होना चाहिए ... मुझे केवल यह करने की जरूरत है।

<android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" > 
</android.support.v4.view.ViewPager> 

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:gravity="center" 
     android:measureWithLargestChild="true" 
     android:orientation="horizontal" > 

<Button 
      android:id="@+id/first" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="First" > 
     </Button> 

<Button 
      android:id="@+id/last" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Last" > 
</Button> 
</LinearLayout> 

स्रोत: http://www.truiton.com/2013/05/android-fragmentpageradapter-example/

18

आप getChildFragmentManager() बजाय getSupportFragmentManager() का उपयोग करना चाहिए एक टुकड़ा अंदर FragmentManger मिलता है। लेकिन आपको FragmentPagerAdapter के बजाय FragmentStatePagerAdapter का उपयोग नहीं करना चाहिए।

+0

धन्यवाद, मेरे लिए काम करो! –

1

यह संभव है। इस कोड को view_pager_fragment.xml फ़ाइल

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBarLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

ViewPagerFragment

ViewPager viewPager; 
TabLayout tabLayout; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.tracks, container, false); 

    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    tabLayout = (TabLayout) view.findViewById(R.id.tab); 

    return view; 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    setupViewPager(viewPager); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());`` 

    viewPagerAdapter.addFragment(new FirstFragment(), "First"); 
    viewPagerAdapter.addFragment(new SecoundFragment(), "Secound"); 
    viewPagerAdapter.addFragment(new LoginFragment(), "Login"); 

    viewPager.setAdapter(viewPagerAdapter); 
} 

private class ViewPagerAdapter extends FragmentPagerAdapter { 

    List<Fragment> fragmentList = new ArrayList<>(); 
    List<String> fragmentTitles = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragmentList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentTitles.get(position); 
    } 

    public void addFragment(Fragment fragment, String name) { 
     fragmentList.add(fragment); 
     fragmentTitles.add(name); 
    } 
} 
संबंधित मुद्दे