Android:导航抽屉片段内的Viewpager
Posted
技术标签:
【中文标题】Android:导航抽屉片段内的Viewpager【英文标题】:Android: Viewpager inside a fragment of Navigation Drawer 【发布时间】:2014-05-22 23:52:48 【问题描述】:我目前正在开发一个 android 应用程序,我需要在 Navigation Drawer 的片段中实现 Viewpager 或 Tabs。我已经实现了本教程中的导航抽屉:Navigation Drawer Tutorial
现在我的导航抽屉由 3 个片段组成。 片段 A、片段 B、片段 C
在Fragment A上,我怎样才能为这个Fragment添加一个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_
android:layout_
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_
android:layout_>
<!--
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_
android:layout_
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();
【讨论】:
以上是关于Android:导航抽屉片段内的Viewpager的主要内容,如果未能解决你的问题,请参考以下文章
带有导航抽屉的片段中的 ListView 和 ViewPager