6

Tôi hiện đang phát triển một ứng dụng Android những gì tôi cần là triển khai một Viewpager hoặc Tabs bên trong một phần của Navigation Drawer. Tôi đã triển khai Ngăn điều hướng từ hướng dẫn này: Navigation Drawer TutorialAndroid: Viewpager bên trong một đoạn của Navigation Drawer

Bây giờ tôi có Ngăn điều hướng bao gồm 3 đoạn. Fragment A, Fragment B, C Fragment

trên Fragment Một làm thế nào tôi có thể thêm một ViewPager cho Fragment này?

+0

Bạn đã tìm thấy giải pháp chưa? Tôi có cùng một câu hỏi ... – mt0s

+0

Một ví dụ đơn giản cho bất kỳ ai nhìn xung quanh để thực hiện điều này: https://github.com/vivekverma6594/ViewPagerwithNavigationView –

Trả lời

0

Có một lớp ViewPager là một phần của thư viện hỗ trợ. Bạn sẽ có thể sử dụng nó cùng với một PagerAdapter.

9

Điều này chắc chắn có thể xảy ra. Bạn chỉ cần sử dụng các mảnh con cho người xem. Khác hơn là việc thực hiện là đơn giản. Tạo một adapter tùy chỉnh máy nhắn tin, sử dụng api ViewPager chuẩn

Mở rộng FragmentPagerAdapter như vậy:

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; 



     } 
    } 

Bạn sẽ cần một bố trí với một ViewPager tất nhiên, sau đó chỉ cần đảm bảo để móc nó lên như thế này trong Fragment A:

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

Lưu ý rằng bạn sẽ cần phải sử dụng thư viện và hỗ trợ hỗ trợ những mảnh trừ SDK tối thiểu của bạn là 4.2 hoặc cao hơn, kể từ khi các mảnh vỡ con là API 17

+0

getChildFragmentManager() Nó làm việc cho tôi :) – Josinaldo

1

Điều này có thể cho Android < 4.2. Trong phương pháp Fragment MộtonCreateView của bạn, khi bạn đang thổi phồng gốc View, thổi phồng bố trí của bạn có chứa các android.support.v4.view.ViewPager: một cái gì đó

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

your_viewpager_layout.xml là tương tự như sau:

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

Sau đó, trong phương thức FragmentPagerAdapter.getItem(int position) của bạn, trả về Fragment bạn muốn hiển thị trong số ViewPager, như bạn sẽ làm trong Chế độ xem "bình thường".

0

Ở đây bạn đi .. đầu tiên xem pager đoạn lớp tab hoặc ..

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

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> 

sử dụng trong lớp học hoạt động có sử dụng Ngăn điều hướng, Lưu ý: Tôi đã sử dụng mã ngăn kéo điều hướng được cung cấp bởi 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(); 
} 
Các vấn đề liên quan