Как добавить макет вкладки, не позволяя активности расширять TabActivity? - PullRequest
2 голосов
/ 20 октября 2011

У меня есть действие, в котором я должен использовать TabBar, я уже расширил это действие из другого класса, поэтому я не могу расширить TabActivity.

Я прочитал одно решение использовать tabHost.setup () ЗДЕСЬ .

Но я не могу выполнить этот путь. Получаю исключение NullPointerException.

Если кто-то может помочь мне с правильным примером.

Вот файл XML

   <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mytabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


    <LinearLayout android:id="@+id/LinearLayout01"
        android:orientation="vertical" android:layout_height="fill_parent"
        android:layout_width="fill_parent">

        <TabWidget android:id="@android:id/tabs" 
            android:layout_height="wrap_content" android:layout_width="fill_parent"></TabWidget>

        <FrameLayout android:id="@android:id/tabcontent" 
            android:layout_height="fill_parent" android:layout_width="fill_parent"></FrameLayout>

    </LinearLayout>

</TabHost>

Вот файл Java.

public class TabActivityActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TabHost tabHost = (TabHost) findViewById(R.id.mytabhost);
    tabHost.setup();
  }

}

Вот ошибка Log Cat

10-20 15: 21: 05.196: ОШИБКА / AndroidRuntime (6265): необработанный обработчик: выход из основного потока из-за необработанного исключения 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): java.lang.NullPointerException 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): atroid.widget.TabHost.dispatchWindowFocusChanged (TabHost.java:295) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java:661) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java:661) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java:661) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.view.ViewRoot.handleMessage (ViewRoot.java:1819) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.os.Handler.dispatchMessage (Handler.java:99) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.os.Looper.loop (Looper.java:123) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на android.app.ActivityThread.main (ActivityThread.java:4363) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на java.lang.reflect.Method.invokeNative (собственный метод) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на java.lang.reflect.Method.invoke (Method.java:521) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 10-20 15: 21: 05.206: ОШИБКА / AndroidRuntime (6265): в dalvik.system.NativeStart.main (собственный метод)

При добавлении второй вкладки выдается следующая ошибка

10-20 16: 46: 23.361: ОШИБКА / AndroidRuntime (1471): необработанный обработчик: выход из основного потока из-за необработанного исключения 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.tab/com.tab.TabActivityActivity}: java.lang.RuntimeException: не удалось создать содержимое вкладки потому что не удалось найти вид с идентификатором 2130903041 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2496) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.app.ActivityThread.access $ 2200 (ActivityThread.java:119) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1863) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.os.Handler.dispatchMessage (Handler.java:99) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.os.Looper.loop (Looper.java:123) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на android.app.ActivityThread.main (ActivityThread.java:4363) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в java.lang.reflect.Method.invokeNative (собственный метод) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в java.lang.reflect.Method.invoke (Method.java:521) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860)10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): at dalvik.system.NativeStart.main (собственный метод) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): вызвано: java.lang.RuntimeException: не удалось создать содержимое вкладки, поскольку не удалось найти представление с идентификатором2130903041 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): at android.widget.TabHost $ ViewIdContentStrategy. (TabHost.java:587) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): вandroid.widget.TabHost $ ViewIdContentStrategy. (TabHost.java:578) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в android.widget.TabHost $ TabSpec.setContent (TabHost.java:435) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в com.tab.TabActivityActivity.onCreate (TabActivityActivity.java:22) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 10-20 16: 46: 23.381: ОШИБКА / AndroidRuntime (1471): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459) 10-20 16: 46: 23,381: ОШИБКА / AndroidRuntime (1471): ... еще 11

1 Ответ

4 голосов
/ 20 октября 2011

Поместите в него хотя бы одну вкладку

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TabHost tabHost = (TabHost) findViewById(R.id.mytabhost);
    tabHost.setup();

    TabSpec tab1 = tabHost.newTabSpec("TAB_1");
    tab1.setIndicator("Tab 1");
    tab1.setContent(R.id.tab1);
    tabHost.addTab(tab1);

    //tab 2 etc...
    TabSpec tab2 = tabHost.newTabSpec("TAB_2");
    tab2.setIndicator("Tab 2");
    tab2.setContent(R.id.tab2);
    tabHost.addTab(tab2);
}

и в XML:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mytabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


    <LinearLayout android:id="@+id/LinearLayout01"
        android:orientation="vertical" android:layout_height="fill_parent"
        android:layout_width="fill_parent">

        <TabWidget android:id="@android:id/tabs" 
            android:layout_height="wrap_content" android:layout_width="fill_parent"></TabWidget>

        <FrameLayout android:id="@android:id/tabcontent" 
            android:layout_height="fill_parent" android:layout_width="fill_parent">
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:id="@+id/tab1">
                <!-- tab 1 content goes here -->
            </LinearLayout>
            <LinearLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:id="@+id/tab2">
                <!-- tab 2 content goes here -->
            </LinearLayout>

        </FrameLayout>

    </LinearLayout>

</TabHost>
...