Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:TabHost和ViewPage多頁滑動的使用

android:TabHost和ViewPage多頁滑動的使用

編輯:關於Android編程

 

要實現的一個簡單的功能:

大致說下:
TabHost中自定的每個可以點擊的區域,可以設置為點擊切換Tab,兩次點擊同一個Tab,刷新當前tab,那麼ViewPage也可以那樣的,但是有個第三方的viewpagerindicator,項目裡直接用這個;

文字描述:
在ViewPage中的三個Fragment之間滑動的時候不刷新每個Fragment的內容,在點擊ViewPage上面的Indicate時刷新每個Fragment;

 

簡單實現的一些想法:

TabHost比較簡單,點擊tab1時,如果當前顯示tab1,則刷新,否則切換tab

  tabHost.addTab(tabHost.newTabSpec(tab+i).setIndicator(tabView[i])
                    .setContent(tabContent[i]));
            tabView[i].setTag(i);
            tabView[i].setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                        int tabId=Integer.parseInt(v.getTag().toString());
                    if(tabId==tabHost.getCurrentTab()){
                        reloadByTabId(tabId);
                    }else  {
                        tabHost.setCurrentTab(tabId);
                        changeTabCotent(tabId);
                    }
                }
            });

ViewPage也可以像TabHost一樣,不過用了第三方的,那麼就重新換個思路;

        CONTENT =new String[]{};
        FRAMES = new Fragment[]{};
        initIndicator(,CONTENT,FRAMES);
        adapter = new ViewPageAdapter(getSupportFragmentManager());
        mViewPage = (MyViewPager)findViewById(R.id.pager);
        mViewPage.setAdapter(adapter);
        mViewPage.setOffscreenPageLimit(0);

        TabPageIndicator indicator =(TabPageIndicator)findViewById(R.id.indicator);
        indicator.setViewPager(mViewPage, selectIndex);
        indicator.setOnPageChangeListener(new ViewPageListener());   

有的說viewPage中超出一定數量的Fragment切換回來後界面變白了,也不清楚是什麼原因,那麼在ViewPage中攔截destroyItem():

 class ViewPageAdapter extends FragmentPagerAdapter {
        public ViewPageAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return FRAMES[position % CONTENT.length];
        }

        @Override
        public int getItemPosition(Object object) {
            return super.getItemPosition(object);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position % CONTENT.length];
        }

        @Override
        public int getCount() {
            return CONTENT.length;
        }

        @Override
        public void destroyItem(View container, int position, Object object) {
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        }
    }

ViewPageListener.class關鍵是這裡,viewpage初始化選中事件有時候會在界面初始化完成之前不清楚是哪裡的問題,所以調用onViewPageSelection()時注意當前頁面已初始化完畢;

    class ViewPageListener implements OnPageChangeListener {

        private int offset = 0;

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            offset = arg2;
            if(isInit&&arg1==0&&arg2==0){
                onPageSelected(arg0);
                isInit = false;
            }
        }

        @Override
        public void onPageSelected(int arg0) {
            if(adapter!=null){
                Fragment fragment = adapter.getItem(arg0);
                if(fragment instanceof MyBaseFragment){
                    MyBaseFragment myFragment = (MyBaseFragment)fragment;
                    myFragment.onViewPageSelection(arg0,offset);
                }
            }
        }
    }

在單個Fragment中獲取Viewpager事件通知:

@Override
    public void onViewPageSelection(int index,int offset) {
        super.onViewPageSelection(index,offset);
        selectedIndex = index;
        setPositon(index);
        if(!hasLoadOk.containsKey(index)||hasLoadOk.get(index)==false){
            isShowProgress = false;
            startLocation(true,false);
        }else if(offset==0){
            isShowProgress = true;
            loadData(true);
        }
    }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved