6

Attualmente sto sviluppando un'applicazione Android che mi serve per implementare un Viewpager o Tab all'interno di un frammento di Navigation Drawer. Ho già implementato il Navigation Drawer da questo tutorial: Navigation Drawer TutorialAndroid: Viewpager all'interno di un frammento di Navigation Drawer

Ora ho il mio Navigation Drawer composto da 3 frammenti. Frammento A, frammento B, C Frammento

su Frammento Un come posso aggiungere un Viewpager per questo frammento?

+0

Hai trovato una soluzione? Ho la stessa domanda ... – mt0s

+0

Un semplice esempio per chiunque si guardi attorno per implementare questo: https://github.com/vivekverma6594/ViewPagerwithNavigationView –

risposta

0

Esiste una classe ViewPager che fa parte della libreria di supporto. Dovresti essere in grado di usarlo insieme a un PagerAdapter.

9

Questo è sicuramente possibile. Hai solo bisogno di usare i frammenti figlio per il viewpager. Oltre a ciò l'implementazione è semplice. Creare un adattatore cercapersone personalizzato, utilizzare l'API standard di viewpager

Estendere FragmentPagerAdapter in questo modo:

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; 



     } 
    } 

avrete bisogno di un layout con una viewpager naturalmente, poi basta assicurarsi di collegarlo come questo in frammento a:

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

si noti che è necessario utilizzare la libreria di supporto e frammenti di supporto a meno che lo SDK minimo è di 4.2 o superiore, dal momento che i frammenti figlio sono API 17

+0

getChildFragmentManager() Ha funzionato per me :) – Josinaldo

1

Questo è possibile per Android < 4.2. nel metodo Frammento AonCreateView, quando si sta gonfiando la radice View, gonfiare il layout contenente la android.support.v4.view.ViewPager:

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

your_viewpager_layout.xml essere qualcosa di simile a quanto segue:

<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" /> 

Poi nel metodo FragmentPagerAdapter.getItem(int position), restituire lo Fragment che si desidera visualizzare nel proprio ViewPager, come si farebbe in un "normale" ViewPager.

0

Qui si va .. prima vista cercapersone classe frammento a schede o ..

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

il file xml 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> 

utilizzo in classe di attività che utilizza navigazione Cassetto, Nota: Ho usato il codice del cassetto di navigazione pre fornito da 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(); 
} 
Problemi correlati