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

來源:互聯網
上載者:User

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

 

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

大致說下:
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);        }    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.