首页 新闻 会员 周边

Android:TabHost中Activity的生命周期问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-09-03 13:37

      用过TabHost制作多个activity的分页效果的朋友应该知道,tabhost中镶嵌的activity的onCreate和onDestroy是和tabhost关联的,在创建了tabhost之后,第一次访问某个activity会执行这个activity的oncreate事件,以后切回来时只会执行onResume事件。而一般情况下tabhost内的activtiy的onDestroy事件会在调用tabhost的onDestroy时统一调用。

      但是我今天遇到一个问题。我想实现一个动态加载Tabhost内的Activity的效果,即:假设这个Tabhost内有两个tab页tab1和tab2,分别放置Tab1Activy和Tab2Activity,在点击了tab1内的按钮后我要把tab2变成tab3,tab3内放置Tab3Activty。现在我跟踪Tab3Activity的生命周期,很神奇的发现每次在tab1和tab3之间切换时,Tab3Activity都会调用onDestroy和onCreate方法,这是怎么回事呢? 附上我动态修改Tab页的代码。

MainActivity

package com.example.tabhostdemo;


import java.util.ArrayList;


import android.os.Bundle;
import android.app.Activity;
import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class MainActivity extends TabActivity {
    public static TabHost mtabHost;
    public static ArrayList<TabSpec> lSpecs=new ArrayList<TabSpec>(); 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mtabHost=this.getTabHost();
        LayoutInflater inflater=LayoutInflater.from(this);
//将创建的TabSpec对象加入数组 TabSpec tabSpec
=mtabHost.newTabSpec("1").setIndicator("TAB1").setContent( new Intent(this, Tab1Activity.class)); mtabHost.addTab(tabSpec); lSpecs.add(tabSpec); tabSpec=mtabHost.newTabSpec("2").setIndicator("tab2").setContent(new Intent(this, Tab2Activity.class)); mtabHost.addTab(tabSpec); lSpecs.add(tabSpec); tabSpec=mtabHost.newTabSpec("2").setIndicator("tab3").setContent(new Intent(this, Tab3Activity.class)); lSpecs.add(tabSpec); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

Tab1Activity:

package com.example.tabhostdemo;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.TabHost.TabSpec;

public class Tab1Activity extends Activity {
    TabHost mtabHost;
    ArrayList<TabSpec> lSpecs=new ArrayList<TabSpec>(); 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1);
        mtabHost=MainActivity.mtabHost;//获取tabhost对象
        lSpecs=MainActivity.lSpecs;//获取所有的Tabspecs对象
        Log.i("11","tab1 onstart");
    }

    public void btn_tab1_onclick(View v) {
        mtabHost.clearAllTabs();//清空 重新添加
        mtabHost.addTab(lSpecs.get(1));
        mtabHost.addTab(lSpecs.get(2));
//        Toast.makeText(this, "tab1", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onResume() {
        Log.i("11","tab1 onresume");
        super.onResume();
    }
    @Override 
    protected void onDestroy() {
        // TODO Auto-generated method stub
        Log.i("11","tab1 ondestroy");
        super.onDestroy();
    }
}
林J的主页 林J | 菜鸟二级 | 园豆:202
提问于:2013-09-02 16:21
< >
分享
所有回答(1)
0

自己解决了,最终使用ActivityGroup来管理动态activity的切换。来这里问android的问题好像一次都没被人回答过。

林J | 园豆:202 (菜鸟二级) | 2013-09-03 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册