2012-04-23 5 views
9

Ich bin Anwendung für Registerkarte erstellen.Aktivitätsdialog mit Registerkarte

  1. Auf Schaltfläche anklickt Ich versuche Aktivität zu zeigen (zB A) mit Thema @android:style/Theme.Dialog
  2. Innen Aktivität A ich ActionBar bin Erstellen und Hinzufügen von 4 Registerkarten.
  3. Auf einen Klick auf Registerkarte Ich möchte Fragment ändern.

Alles funktioniert gut, bis ich nicht Thema der Anwendung am @android:style/Theme.Dialog Nach Thema Anwendung ich Ausnahme bin immer:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ebuilder/com.ebuilder.views.MyTabActivity}: java.lang.NullPointerException 

an folgenden Zeile:

actionBar.addTab(actionBar.newTab().setCustomView(R.layout.tab_home). 
        setTabListener(homeListener), 0); 

Ich habe zwei Fragen:

1. Was ist falsch, wenn ich sie anwende? Der Dialog?

2. Ist meine Vorgehensweise richtig?

Lassen Sie mich wissen, wenn jemand einen anderen Ansatz kennt.

Edit1: * Manifest-Datei *

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.vivek" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:targetSdkVersion="14"/> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".FragmentInsideFragmentTestActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.CustomDialog" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

res/Werte/style.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.CustomDialog" parent="android:style/Theme.Dialog"> 
      <item name="android:windowNoTitle">false</item> 
      <item name="android:windowActionBar">true</item>   
    </style> 
</resources> 

EDIT2

05-03 21:42:10.580: D/AndroidRuntime(533): Shutting down VM 
05-03 21:42:10.580: W/dalvikvm(533): threadid=1: thread exiting with uncaught exception (group=0x40014760) 
05-03 21:42:10.600: E/AndroidRuntime(533): FATAL EXCEPTION: main 
05-03 21:42:10.600: E/AndroidRuntime(533): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vivek/com.vivek.FragmentInsideFragmentTestActivity}: java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layout 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread.access$1500(ActivityThread.java:122) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.os.Looper.loop(Looper.java:132) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread.main(ActivityThread.java:4025) 
05-03 21:42:10.600: E/AndroidRuntime(533): at java.lang.reflect.Method.invokeNative(Native Method) 
05-03 21:42:10.600: E/AndroidRuntime(533): at java.lang.reflect.Method.invoke(Method.java:491) 
05-03 21:42:10.600: E/AndroidRuntime(533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
05-03 21:42:10.600: E/AndroidRuntime(533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
05-03 21:42:10.600: E/AndroidRuntime(533): at dalvik.system.NativeStart.main(Native Method) 
05-03 21:42:10.600: E/AndroidRuntime(533): Caused by: java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layout 
05-03 21:42:10.600: E/AndroidRuntime(533): at com.android.internal.app.ActionBarImpl.init(ActionBarImpl.java:214) 
05-03 21:42:10.600: E/AndroidRuntime(533): at com.android.internal.app.ActionBarImpl.<init>(ActionBarImpl.java:192) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.Activity.initActionBar(Activity.java:1767) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.Activity.setContentView(Activity.java:1781) 
05-03 21:42:10.600: E/AndroidRuntime(533): at com.vivek.FragmentInsideFragmentTestActivity.onCreate(FragmentInsideFragmentTestActivity.java:47) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
05-03 21:42:10.600: E/AndroidRuntime(533): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 
05-03 21:42:10.600: E/AndroidRuntime(533): ... 11 more 
+0

Ich würde empfehlen, die Registerkarte in Bits zu erstellen, anstatt es in einem großen Stück zu tun. Dann können Sie genau bestimmen, was nullpointer gibt. Nullpointer sollte ziemlich einfach zu lösen sein. – Warpzit

+1

nein eigentlich actionBar selbst ist null wenn ich theme 'Theme.Dialog' anwende, daher die Ausnahme. – Vivek

+0

Meine Vermutung (es ist eine Vermutung) ist, dass das Dialog-Thema keinen Titel hat und da die Aktionsleiste tief unten eine Titelleiste ist, bedeutet dies, dass es keine Aktionsleiste gibt, daher null. Ist es möglich, ein anderes Thema zu verwenden? – Warpzit

Antwort

0

Sie können ein benutzerdefiniertes Dialogfelddesign erstellen, indem Sie die Eigenschaften des Dialogfelds außer Kraft setzen, die Sie für eine Aktionsleiste nicht benötigen. Fügen Sie auch die android:windowActionBar-Eigenschaft hinzu.

+0

Wenn ich dieses Thema bekomme 'java.lang.IllegalStateException: ActionBarImpl kann nur mit einem kompatiblen Fensterdekorlayout verwendet werden 'Dieser Fehler – Vivek

+0

Dies sollte funktionieren. Sind Sie sicher, dass Sie das Attribut parent = "android: style/Theme.Dialog" im Style-Tag gesetzt haben? Versuchen Sie es mit dem 'windowNoTitle' Element. – Ronnie

+0

Hey, wechseln Sie' Theme.dialog' zu 'android: Theme.Holo.Dialog'. Dies ist das Standarddialogthema für Anwendungen, die auf Honeycomb oder neuer ausgerichtet sind. 'Theme.dialog' wird als gebrochen gemeldet ... – Ronnie

1

Ich kämpfe mit dem gleichen Problem hier und fand zwei verschiedene Ansätze bisher.

Die erste beschrieben here ist die, die ich verwendet habe.

Es gab auch this Antwort, die dem ersten sehr ähnlich sieht.

Das große Problem scheint zu sein, dass die ActionBar nur auf einem Vollbild-Layout verwendet werden soll, so dass alles, was versucht, ein Dialog-Layout anzuwenden, eine Ausnahme verursachen wird. Aus diesem Grund setzen beide die Breite auf this.getWindow().setAttributes mit einem festen Wert, um das Problem zu umgehen.

Das war die Schlussfolgerung, die ich mir ausgedacht habe, hoffe, dass es jedem hilft, der danach sucht, da dies eine sehr alte Frage ist.

Verwandte Themen