繁体   English   中英

Android Studio上的Viewpager和片段

[英]Viewpager and fragment on android studio

android开发人员请帮助,当我滑入页面并到达最后一页时,我有带片段的viewpager,然后当我再次返回首页时,首页的片段会加载其默认显示。请帮助。这是我的MainActivity中的代码

public class MainActivity extends AppCompatActivity {

    private ActionBarDrawerToggle actionBarDrawerToggle;
    private DrawerLayout drawerLayout;
    private ListView navList;
    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;
    private ActionBar actionBar;
    private ViewPager pager;
    private Menu menu;
    private float lastTranslate = 0.0f;
    private FrameLayout mainframe, galleryframe;
    private Frag_Gallery fragGallery;
    private Frag_Create fragCreate;
    private Frag_Account fragAccount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pager = (ViewPager) findViewById(R.id.viewPager);
        mainframe = (FrameLayout) findViewById(R.id.fragmentholder);
        galleryframe = (FrameLayout) findViewById(R.id.galleryholder);
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#0b115e"));
        Main_Menu Menu_data[] = new Main_Menu[]
                {
                        new Main_Menu(R.mipmap.gallery_icon, "Gallery"),
                        new Main_Menu(R.mipmap.create_icon, "Create Your Own"),
                        new Main_Menu(R.mipmap.account_icon, "My Account"),
                        new Main_Menu(R.mipmap.contact_icon, "Contact Us")
                };
        MainMenuAdapter adapter = new MainMenuAdapter(this,
                R.layout.listviewmain_item_row, Menu_data);

        drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
        navList = (ListView) findViewById(R.id.navList);

        View header = (View) getLayoutInflater().inflate(R.layout.listviewmain_header_row, null);

        navList.addHeaderView(header);

        navList.setAdapter(adapter);
        navList.setDivider(null);
        navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        navList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                loadSelection(position);
                drawerLayout.closeDrawer(navList);
            }
        });

        actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.opendrawer, R.string.closedrawer);
        drawerLayout.setDrawerListener(actionBarDrawerToggle);

        actionBar = getSupportActionBar();
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setBackgroundDrawable(colorDrawable);

        actionBar.setTitle("");

        fragmentManager = getSupportFragmentManager();
        loadSelection(0);
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int pos) {
                switch (pos) {
                    case 0:
                        menu.getItem(0).setIcon(R.mipmap.gallery_icon);
                        menu.getItem(1).setIcon(R.mipmap.create_icon_off);
                        menu.getItem(2).setIcon(R.mipmap.account_icon_off);
                        break;
                    case 1:
                        menu.getItem(0).setIcon(R.mipmap.gallery_icon_off);
                        menu.getItem(1).setIcon(R.mipmap.create_icon);
                        menu.getItem(2).setIcon(R.mipmap.account_icon_off);
                        break;
                    case 2:
                        menu.getItem(0).setIcon(R.mipmap.gallery_icon_off);
                        menu.getItem(1).setIcon(R.mipmap.create_icon_off);
                        menu.getItem(2).setIcon(R.mipmap.account_icon);
                        break;

                }

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        this.menu = menu;
        getMenuInflater().inflate(R.menu.menu_main, menu);
        menu.getItem(0).setIcon(R.mipmap.gallery_icon);
        menu.getItem(1).setIcon(R.mipmap.create_icon_off);
        menu.getItem(2).setIcon(R.mipmap.account_icon_off);
        return true;
    }

    private void loadSelection(int i) {

        switch (i) {
            case 1:
                actionBar.setTitle("Gallery");
                pager.setCurrentItem(0, true);
                break;
            case 2:
                actionBar.setTitle("Design");
                pager.setCurrentItem(1, true);
                break;
            case 3:
                actionBar.setTitle("Account");
                pager.setCurrentItem(2, true);
                break;
            case 4:
                actionBar.setTitle("Contact us");
                break;
            default:
                actionBar.setTitle("");
                break;
        }
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        actionBarDrawerToggle.syncState();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == android.R.id.home) {
            if (drawerLayout.isDrawerOpen(navList)) {
                drawerLayout.closeDrawer(navList);
            } else {
                drawerLayout.openDrawer(navList);
            }
        }

        return super.onOptionsItemSelected(item);
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {

        private Fragment fragment;

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {

            fragment = new Fragment();
            switch (pos) {
                case 0:
                    fragment = new Frag_Gallery();
                    break;
                case 1:
                    fragment = new Frag_Create();
                    break;
                case 2:
                    fragment = new Frag_Account();
                default:
                    break;
            }
            return fragment;
        }


        @Override
        public int getCount() {
            return 3;
        }
    }

}

采用

pager.setOffscreenPageLimit(X);

X是您要保存的页面数,因此ViewPager不会重建它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM