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;
}
}
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;
}
}
解决方案
@Override
public void onTabChanged(String tabId) {
if (tabId.equals("tab1")){
LocalActivityManager mlocalActivityManager = getLocalActivityManager();
mlocalActivityManager.dispatchPause(isFinishing());
mlocalActivityManager.dispatchResume();
tabs.setCurrentTab(1);// tab1是添加的第二个tab
}
}
};
用户评论