Frage

Ich schreibe ein Android-Programm, in dem ich eine Aktivität haben, dass Verwendungen Registerkarten.

Die Aktivität

public class UnitActivity extends TabActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  TabHost tabHost = getTabHost();
  TabSpec spec;
  Resources res = getResources();

  LayoutInflater.from(this).inflate(R.layout.unit_view, tabHost.getTabContentView(), true);

  spec = tabHost.newTabSpec("controls");
  spec.setIndicator("Control", res.getDrawable(R.drawable.ic_tab_equalizer));
  spec.setContent(R.id.txtview);
  tabHost.addTab(spec);
}

}

Die XML-referenzierte von R.layout.unit_view

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
  <TabWidget android:id="@android:id/tabs"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"/>
    <FrameLayout android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
      <TextView android:id="@+id/txtview"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:gravity="bottom"
          android:text="nullpointer this!" />
    </FrameLayout>
  </LinearLayout>
</TabHost>

Soweit ich sehe, kann ich das Gleiche mache ich in der tabs1 api Probe aus dem Android SDK. Ich habe versucht, "getLayoutInflator ()" statt "LayoutInflator.from (this)" mit dem gleichen Ergebnis.

Wenn ich die LayoutInflater Zeile mit „setContentView (R.layout.unit_view)“ ersetzen mein Programm nicht mit einer Null-Zeiger Ausnahme abstürze, aber mein Gehalt ist völlig leer und leer. Ich auf die Registerkarte bekommen und das ist es.

Ich habe überprüft, dass R.layout.unit_view und TabHost zu machen ist nicht null, wenn es die LayoutInflater Linie verläuft, und sie scheinen in Ordnung zu sein. Sie sind sicher nicht null. Ich habe auch, um sicherzustellen, LayoutInflater.from überprüft (dies) gibt ein gültiges Layout inflater Objekt und es funktioniert.

Die logcat, die den Fehler sagt

 E/AndroidRuntime(  541): java.lang.NullPointerException
 E/AndroidRuntime(  541):  at android.widget.TabWidget.dispatchDraw(TabWidget.java:206)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.View.draw(View.java:6538)
 E/AndroidRuntime(  541):  at android.widget.FrameLayout.draw(FrameLayout.java:352)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
 E/AndroidRuntime(  541):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
 E/AndroidRuntime(  541):  at android.view.View.draw(View.java:6538)
 E/AndroidRuntime(  541):  at android.widget.FrameLayout.draw(FrameLayout.java:352)
 E/AndroidRuntime(  541):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
 E/AndroidRuntime(  541):  at android.view.ViewRoot.draw(ViewRoot.java:1349)
 E/AndroidRuntime(  541):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
 E/AndroidRuntime(  541):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
 E/AndroidRuntime(  541):  at android.os.Handler.dispatchMessage(Handler.java:99)
 E/AndroidRuntime(  541):  at android.os.Looper.loop(Looper.java:123)
 E/AndroidRuntime(  541):  at android.app.ActivityThread.main(ActivityThread.java:4363)
 E/AndroidRuntime(  541):  at java.lang.reflect.Method.invokeNative(Native Method)
 E/AndroidRuntime(  541):  at java.lang.reflect.Method.invoke(Method.java:521)
 E/AndroidRuntime(  541):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
 E/AndroidRuntime(  541):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
 E/AndroidRuntime(  541):  at dalvik.system.NativeStart.main(Native Method)
 I/Process (   61): Sending signal. PID: 541 SIG: 3
 I/dalvikvm(  541): threadid=7: reacting to signal 3
 I/dalvikvm(  541): Wrote stack trace to '/data/anr/traces.txt'

Wer eine Idee, wie ich diesen Inhalt in ein Register meine Anwendung bekommen, ohne abzustürzen? Mein eigentliches Programm ist komplexer und hat mehr als eine Registerkarte, aber ich vereinfachte es in einem Versuch, diese nach unten, um herauszufinden, warum es abstürzt, aber es stürzt immer noch, und ich weiß nicht, warum.

Wenn ich LayoutInflator mein Programm nicht nicht abstürzt, aber ich erhalte keine Inhalte entweder nur Registerkarten.

War es hilfreich?

Lösung

Dies funktioniert für mich:

tabHost = getTabHost();

        tabHost.addTab(tabHost.newTabSpec("upcoming").setIndicator(
                getResources().getString(R.string.upcoming)).setContent(R.id.cell1));

Partial XML

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <include android:id="@+id/cell1"
                layout="@layout/my_layout_file" />
             <!-- another include for cell2, and the closing tags -->

Andere Tipps

Für diejenigen von Ihnen, die eine TabHost nicht in einem TabActivity verwenden, dann sicher sein, TabHost.setup () aufzurufen. Hier ist die Dokumentation für sie: http://developer.android.com /reference/android/widget/TabHost.html#setup () Nicht so tun wird in einem Nullpointer führen, wenn Sie versuchen, Tabs zu Ihrem TabHost hinzuzufügen.

Das Tutorial nicht zu erwähnen, dass, so dass ich dachte, dass ich es Ihre Aufmerksamkeit bringen würde ihnen die Zeit zu sparen ich dafür ausgegeben suchen.

Ich wollte nur eine Vorstellung schaffen, auf der Grundlage der Aussagen von hier:

http://code.google.com/p/android/ Fragen / detail? id = 14929

Die TabWidget verursacht einen Absturz, wenn Sie versuchen, es zu ziehen, bevor Sie die Daten geladen werden. Um dies zu verhindern nur Ihre Asynchron-Aufgaben verwenden / Handler nicht nur die Daten zu laden, aber den Inhalt Ansicht zu setzen. Natürlich könnte man eine andere Sicht während des Datenladevorganges verwenden oder Fortschrittsdialog, nur präsentiere nicht den Registerkarten Halter vor.

JAHR! Sie müssen Aufruf:

TabHost.setup ()

, bevor Sie die Methode aufrufen. wenn nicht, sollte die TabHost des TabWidget null sein. Ich habe diesen Fehler so lange.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top