以编程方式删除viewpager

时间:2014-07-08 15:12:24

标签: android android-viewpager

我的应用实现了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

1 个答案:

答案 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。