我的应用实现了navigationdrawer和viewpager(使用PagerSlidingTabStrip)。我的导航器中有3个菜单。根据我在导航器中的选择,我想显示不同的“页面”(我不知道它叫什么)。我完全不想在第一个'页面'上实现viewpager,但对于其余的我想要viewpager。我该怎么做?
下面的是我的代码片段:
public class MainActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
private PagerSlidingTabStrip tabs;
private ViewPager pager;
private MyPagerAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,(DrawerLayout) findViewById(R.id.drawer_layout));
// Bind the tabs to the ViewPager
tabs = (PagerSlidingTabStrip) findViewById(R.id.tabstrip);
pager = (ViewPager)findViewById(R.id.viewpager);
adapter = new MyPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
tabs.setViewPager(pager);
}
private class MyPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = { "Categories", "Home", "Top Paid", "Top Free", "Top Grossing", "Top New Paid"};
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance("yess" + position);
}
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
//Toast.makeText(this, "selected " + position, Toast.LENGTH_SHORT).show();
FragmentManager fragmentManager = getSupportFragmentManager();
if (position == 0){
fragmentManager.beginTransaction()
.replace(R.id.container, PageHome.newInstance())
.commit();
}else{
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
}
}
如果您可以看到上面的内容,如果position == 0表示第一页,则会调用PageHome,并且它不希望与viewpager有任何关系。否则,其他“页面”会有viewpager
答案 0 :(得分:0)
为导航列表中的每个页面制作不同的片段。在Activity的布局XML中,保留一个空的FrameLayout作为内容区域。首次启动时,在onCreate中,您可以将第一个Fragment添加到此容器中。
<DrawerLayout ...>
<FrameLayout android:id="@+id/content_area" ... />
<ListView android:id="@+id/left_drawer" ... />
</DrawerLayout>
protected void onCreate(Bundle saved) {
super.onCreate(saved);
/* other code ... */
if (saved == null) {
// no saved instance state, add the first fragment
Fragment1 fragment = ... // (create new)
getFragmentManager().beginTransaction().add(R.id.content_area, fragment).commit();
}
}
然后,只要用户在导航栏中选择了不同的页面,就可以将当前片段替换为他们选择的片段。仅在需要它的片段中使用ViewPager。