Android: TabHost без TabActivity

Я хочу создать вкладки, не расширяя 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);
}

}

Ошибка, которую я получаю,

    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.

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>

Я считал где-нибудь, что должен использовать LocalActivityManager, я предполагаю, что пропускаю что-то там. Кто-либо идея?

Спасибо!

42
задан Animesh 15 January 2012 в 05:31
поделиться

2 ответа

Пожалуйста, подумайте об использовании просмотров в качестве содержимого ваших вкладок.Это не только приведет к меньшему количеству кода, меньшему потребляемому пространству кучи, меньшему потребляемому пространству стека и более низкой загрузке процессора, но также поможет вам решить эту проблему. Вот два примера , демонстрирующих эту технику.

13
ответ дан 26 November 2019 в 23:29
поделиться

Несмотря на конструктивные соображения, следующее не работает вообще, и API, похоже, указывает, что setContent (Intent i) является допустимым. Это работает, когда действие расширяет TabActivity , однако расширение Activity и добавление вызова setup () приводит к исключению в android.widget.TabHost $ IntentContentStrategy.getContentView (TabHost.java:649)

Забавно то, что LogCat предлагает, чтобы я забыл вызвать setup ()

mTabHost = (TabHost) findViewById(android.R.id.tabhost);
mTabHost.setup();

Intent tab1Intent = new Intent(this, ActivityOne.class);
Button tab1View = new Button(this);
tab1View.setText("Activity 1");
  mTabHost.addTab(mTabHost.newTabSpec("tab_1").setIndicator(tab1View).setContent(tab1Intent));
1
ответ дан 26 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: