【问题标题】:Android: Viewpager inside a fragment of Navigation DrawerAndroid:导航抽屉片段内的Viewpager
【发布时间】:2014-05-22 23:52:48
【问题描述】:

我目前正在开发一个 Android 应用程序,我需要在 Navigation Drawer 的片段中实现 Viewpager 或 Tabs。我已经实现了本教程中的导航抽屉:Navigation Drawer Tutorial

现在我的导航抽屉由 3 个片段组成。 片段 A、片段 B、片段 C

Fragment A上,我怎样才能为这个Fragment添加一个Viewpager?

【问题讨论】:

    标签: android android-layout android-fragments navigation android-viewpager


    【解决方案1】:

    这绝对是可能的。您只需要为 viewpager 使用子片段。除此之外,实现很简单。创建自定义寻呼机适配器,使用标准的 viewpager api

    像这样扩展 FragmentPagerAdapter:

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

    当然,你需要一个带有 viewpager 的布局,然后确保在 Fragment A 中像这样连接它:

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

    请注意,除非您的最低 SDK 为 4.2 或更高版本,否则您将需要使用支持库和支持片段,因为子片段是 API 17

    【讨论】:

      【解决方案2】:

      这对于 Android Fragment A onCreateView 方法中,当您膨胀根 View 时,膨胀包含 android.support.v4.view.ViewPager 的布局:

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

      your_viewpager_layout.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"
          tools:context="com.example.yourapp.YourActivity" />
      

      然后在您的FragmentPagerAdapter.getItem(int position) 方法中,返回您希望在ViewPager 中显示的Fragment,就像您在“普通”ViewPager 中所做的那样。

      【讨论】:

        【解决方案3】:

        有一个 ViewPager 类是支持库的一部分。您应该可以将它与 PagerAdapter 一起使用。

        【讨论】:

          【解决方案4】:

          给你..首先是选项卡式或视图分页器片段类..

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

          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>
          

          在使用导航抽屉的活动类中的用法,注意:我使用了 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();
          }
          

          【讨论】:

            猜你喜欢
            • 2015-04-25
            • 2016-01-03
            • 1970-01-01
            • 2013-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-02
            • 1970-01-01
            相关资源
            最近更新 更多