6

Ich entwickle gerade eine Android-Anwendung, die ich brauche, um einen Viewpager oder Tabs innerhalb eines Fragments von Navigation Drawer zu implementieren. Ich habe bereits die Navigationsschublade aus diesem Tutorial implementiert: Navigation Drawer TutorialAndroid: Viewpager in einem Fragment der Navigationsschublade

Jetzt habe ich meine Navigationsschublade aus 3 Fragmenten bestehen. Fragment A, Fragment B, Fragment C

auf Fragment A Wie kann ich ein Viewpager für dieses Fragment?

+0

Haben Sie eine Lösung gefunden? Ich habe die gleiche Frage ... – mt0s

+0

Ein einfaches Beispiel für jeden, der sich umsieht, um dies zu implementieren: https://github.com/vivekverma6594/ViewPagerwithNavigationView –

Antwort

0

Es gibt eine ViewPager-Klasse, die Teil der Support-Bibliothek ist. Sie sollten das zusammen mit einem PagerAdapter verwenden können.

9

Dies ist definitiv möglich. Sie müssen nur Kindfragmente für den Viewpager verwenden. Ansonsten ist die Implementierung unkompliziert. Erstellen Sie einen benutzerdefinierten Pager-Adapter, verwenden Sie den Standard viewpager api

Extend FragmentPagerAdapter wie so:

private class MyPagerAdapter extends FragmentPagerAdapter 
{ 
    public MyPagerAdapter (FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch (i) { 
      case 0: 
       return Fragment1; 
      case 1: 
       return Fragment2; 

     } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return FRAGMENT_1_NAME; 
      case 1: 
       return FRAGMENT_2_NAME; 



     } 
    } 

Sie benötigen ein Layout mit einem viewpager natürlich dann nur sicherstellen, dass es anschließen, wie dies in Fragment A:

myPagerAdapter = new MyPagerAdapter(this.getChildFragmentManager()); 
myPager = (ViewPager) mRoot.findViewById(R.id.pager); 
myPager.setAdapter(myPagerAdapter); 

Beachten Sie, dass Sie benötigen, um die Support-Bibliothek und Unterstützung Fragmente verwenden, es sei denn, Ihr Mindest SDK 4.2 oder höher ist, da das Kind Fragmente API sind 17

+0

getChildFragmentManager() Es hat für mich funktioniert :) – Josinaldo

1

Dies ist möglich für Android < 4.2. In Ihrem Fragment AonCreateView Methode, wenn Sie die Wurzel View aufzublasen sind, blasen Sie das Layout der android.support.v4.view.ViewPager enthält:

View rootView = inflater.inflate(R.layout.your_viewpager_layout, container, false); 

your_viewpager_layout.xml, etwas ähnlich der folgenden:

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.yourapp.YourActivity" /> 

Dann Senden Sie in Ihrer FragmentPagerAdapter.getItem(int position) Methode die Fragment, die Sie in Ihrem ViewPager anzeigen möchten, wie Sie in einem "normalen" ViewPager tun würden.

0

Sie hier gehen .. zuerst die Registerkarten oder Ansicht Pager Fragment Klasse ..

public class TabbedFragment extends Fragment { 
private SectionsPagerAdapter mSectionsPagerAdapter; 
public static final String TAG = TabbedFragment.class.getSimpleName(); 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
ViewPager mViewPager; 


public static TabbedFragment newInstance() { 
    return new TabbedFragment(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_viewpager_network, container, false); 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getChildFragmentManager()); 

    mViewPager = (ViewPager) v.findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    return v; 
} 


public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     if (position == 0) 
      return FragmentOne.getInstance(); 
     else 
      return FragmentTwo.getInstance(); 
    } 

    @Override 
    public int getCount() { 
     // Show 2 total pages. 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
      case 0: 
       return "Fragment 1"; 
      case 1: 
       return "Fragment 2"; 
     } 
     return null; 
    } 
    } 
} 

die XML-Datei tabbed_fragment.xml

<android.support.v4.view.ViewPager 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<!-- 
This title strip will display the currently visible page title, as well as the page 
titles for adjacent pages. 
--> 

<android.support.v4.view.PagerTitleStrip 
    android:id="@+id/pager_title_strip" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    android:background="#33b5e5" 
    android:paddingBottom="4dp" 
    android:paddingTop="4dp" 
    android:textColor="#fff" /> 

</android.support.v4.view.ViewPager> 

Verwendung in Aktivitätsklasse, die Navigationsleiste verwendet, Hinweis: Ich benutze Navigation Schublade Code Pre gegeben von Android Studio 1.2

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    boolean isChild = getSharedPreferences(Constansts.PREFERENCE_NAME,0).getBoolean(Constansts.IS_CHILD,false); 
    Fragment fragment = null; 
    if (lastSelectedPosition == position) 
     return; 
    lastSelectedPosition = position; 
    switch (position) { 
     case 0: 
      fragment = HomeFragment.getInstance(); 
      break; 
     case 1: 
      fragment = HomeFragment.getInstance(); 
      break; 
     case 2: 
      fragment = UserProfileFragment.getInstance(); 
      break; 
     case 3: 
      fragment = TabbedFragment.getInstance(); 
      break; 
    } 
    if (fragment == null) { 
     fragment = HomeFragment.getInstance(); 
    } 
    fragmentManager = getSupportFragmentManager(); 
    fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.container, fragment).addToBackStack(mTitle.toString()); 
    fragmentTransaction.commit(); 
} 
Verwandte Themen