Android:没有TabActivity的TabHost

par*_*666 42 android android-tabhost

我想创建标签而不扩展TabActivity.(原因是TabActivity无法处理自定义标题栏).我有

public class startTab extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);
        Resources res = getResources();
        LocalActivityManager mlam = new LocalActivityManager(this, false);
        TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
        tabHost.setup(mlam);
        TabHost.TabSpec spec;
        Intent intent;

    intent = new Intent().setClass(this, Show1.class);
    spec = tabHost.newTabSpec("Items").setIndicator("Items", res.getDrawable(R.drawable.items32_ldpi)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, Show2.class);
    spec = tabHost.newTabSpec("Users").setIndicator("Users",res.getDrawable(R.drawable.user32_ldpi)).setContent(intent);
    tabHost.addTab(spec);
}
Run Code Online (Sandbox Code Playgroud)

}

我得到的错误是

    07-02 07:11:12.715: ERROR/AndroidRuntime(411): 
Caused by: java.lang.IllegalStateException: Activities can't be added until the containing group has been created.
Run Code Online (Sandbox Code Playgroud)

视图的xml是

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/tabhost" android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent" >
 <LinearLayout android:orientation="vertical"
  android:layout_width="fill_parent" android:layout_height="fill_parent"
  android:paddingTop="5dip">
  <TabWidget android:id="@android:id/tabs"
   android:layout_width="fill_parent" android:layout_height="fill_parent"></TabWidget>
  <FrameLayout android:id="@android:id/tabcontent"
   android:layout_width="fill_parent" android:layout_height="fill_parent"
   android:paddingTop="5dip">
  </FrameLayout>
 </LinearLayout>
</TabHost>
Run Code Online (Sandbox Code Playgroud)

我在某处读到了我必须使用LocalActivityManager,我认为我在那里遗漏了一些东西.有人有想法吗?

谢谢!

dca*_*121 86

在调用tabHost.setup(mLocalActivityManager)之前; 你需要添加这一行.

mlam.dispatchCreate(savedInstanceState);
tabHost.setup(mlam );
Run Code Online (Sandbox Code Playgroud)

同样,你需要为onResume添加,

mlam.dispatchResume(); 
Run Code Online (Sandbox Code Playgroud)

在onPause()

 mlam.dispatchPause(isFinishing());
Run Code Online (Sandbox Code Playgroud)

  • 但是,您能否在添加这些dispatchXXX()方法后解释为什么这样做?非常感谢:) (4认同)

Com*_*are 13

请考虑使用Views标签的内容.这不仅会导致代码减少,堆空间消耗减少,堆栈空间消耗减少,CPU利用率降低,还可以解决这个问题.以下是显示此技术的两个 示例.

  • @kilaka:不是.活动标签已被弃用,因为谷歌同意这是一个坏主意. (2认同)