今天热门
热点:

TabHost中控制activity生命周期,tabhostactivity


android 在TabHost中当设置activity作为Tab的content时,在activity中重载的onResume(),onPause(),onStop()在切换tab时是不会触发的。
如下是我写的代码:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("这是main中的create");

        goClass = new GoClass(MainActivity.this);
        goLogout = new GoLogout(MainActivity.this);
        checkLogin = new CheckLogin(MainActivity.this);


        init1();
        dbUtils = DbUtils.create(MainActivity.this, "iTreeResume.db");

        context = this;
        listViews = new ArrayList<View>();
        manager = new LocalActivityManager(this, true);
        manager.dispatchCreate(savedInstanceState);

        tabHost = (TabHost) findViewById(R.id.tabhost);

        Intent intent = new Intent(context, Page1Activity.class);
        listViews.add(getView("A", intent));

        intent = new Intent(context, Page2Activity.class);
        listViews.add(getView("B", intent));

        try {
            count=dbUtils.count(Resume.class);
            if(count>0) {
                intent = new Intent(context, Page4Activity.class);
                startActivity(intent);
                listViews.add(getView("C", intent));
            }else{
                intent = new Intent(context, Page3Activity.class);
                listViews.add(getView("C", intent));
            }
        } catch (DbException e) {
            e.printStackTrace();
        }

        tabHost.setup();
        tabHost.setup(manager);


        pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(new MyPageAdapter(listViews));
        pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                tabHost.setCurrentTab(position);

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });

        tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
            @Override
            public void onTabChanged(String tabId) {
                if ("A".equals(tabId)) {
                    LocalActivityManager mlocalActivityManager = getLocalActivityManager();
                    mlocalActivityManager.dispatchPause(isFinishing());
                    mlocalActivityManager.dispatchResume();
                    pager.setCurrentItem(0);
                } else if ("B".equals(tabId)) {
                    pager.setCurrentItem(1);
                } else if ("C".equals(tabId)) {
                    pager.setCurrentItem(2);
                }
            }
        });

        Intent tmpIntent = new Intent(context, EmptyActivity.class); //使用一个空页面,即点击选项卡的时候,页面不会显示任何东西
        tabHost.addTab(tabHost.newTabSpec("A").setIndicator("职位搜索").setContent(tmpIntent));
        tabHost.addTab(tabHost.newTabSpec("B").setIndicator("我的iTree").setContent(tmpIntent));
        tabHost.addTab(tabHost.newTabSpec("C").setIndicator("我的简历").setContent(tmpIntent));

    }



    private View getView(String id, Intent intent) {
        return manager.startActivity(id, intent).getDecorView();
    }

    private class MyPageAdapter extends PagerAdapter {

        private List<View> list;

        private MyPageAdapter(List<View> list) {
            this.list = list;
        }

        @Override
        public void destroyItem(View view, int position, Object arg2) {
            ViewPager pViewPager = ((ViewPager) view);
            pViewPager.removeView(list.get(position));
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object instantiateItem(View view, int position) {
            ViewPager pViewPager = ((ViewPager) view);
            pViewPager.addView(list.get(position));
            return list.get(position);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

    }

解决方案

onResume(),onPause(),onStop() 都是会触发的, 但是不推荐使用activity做content, 使用fragment比较好.

    private OnTabChangeListener TabChangeListener = new OnTabChangeListener() {
                    
                    @Override
                    public void onTabChanged(String tabId) {
                            if (tabId.equals("tab1")){
                                    LocalActivityManager mlocalActivityManager = getLocalActivityManager();
     mlocalActivityManager.dispatchPause(isFinishing());
                                    mlocalActivityManager.dispatchResume();
                                    tabs.setCurrentTab(1);// tab1是添加的第二个tab
                            }
                    }
            };

www.zrccd.nettrue/topics/20180202/188810.htmlTechArticleTabHost中控制activity生命周期,tabhostactivity android 在TabHost中当设置activity作为Tab的content时,在activity中重载的onResume(),onPause(),onStop()在切换tab时是不会触发的。 如下是我写的代码: p...

相关文章

    暂无相关文章

用户评论

大家都在看