2012-04-23 13 views
9

Estoy creando aplicaciones para la pestaña.Diálogo de actividad con la pestaña

  1. al hacer clic con el botón estoy tratando de mostrar la actividad (por ejemplo Un) con el tema @android:style/Theme.Dialog
  2. Dentro de la actividad Un estoy creando actionbar y la adición de 4 pestañas.
  3. Al hacer clic en la pestaña quiero cambiar el fragmento.

todo funciona bien hasta que ya no estoy aplicando tema @android:style/Theme.Dialog Después de aplicar el tema que estoy recibiendo excepción:

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

en la siguiente línea:

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

Tengo dos preguntas:

1. ¿Qué sucede si los aplico? e diálogo?

2. ¿Mi enfoque es correcto?

Avísame si alguien conoce otro enfoque.

Edit1: * El archivo de manifiesto *

<?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/valores/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

Recomiendo construir la pestaña en mordiscos en lugar de hacerlo en una gran parte. A continuación, puede determinar exactamente qué da nullpointer. Nullpointer debería ser bastante simple de resolver. – Warpzit

+1

en realidad no actionBar en sí es nulo si aplico el tema 'Theme.Dialog' de ahí la excepción. – Vivek

+0

Mi conjetura (es una conjetura) es que el tema de diálogo no tiene título y dado que la barra de acciones en el fondo es una barra de título, esto significa que no hay ninguna barra de acciones, por lo tanto nulo. ¿Es posible usar un tema diferente? – Warpzit

Respuesta

0

Puede crear un tema de diálogo personalizado anulando las propiedades de diálogo que no necesita para una barra de acciones. También agregue la propiedad android:windowActionBar.

<style name="Theme.CustomDialog" parent="android:Theme.Holo.Dialog"> 
    <item name="android:windowNoTitle">false</item> 
    <item name="android:windowActionBar">true</item> 
    ... 
</style> 
+0

Si aplico este tema obtengo 'java.lang.IllegalStateException: ActionBarImpl solo se puede utilizar con un diseño de decoración de ventana compatible 'este error – Vivek

+0

Esto debería funcionar. ¿Estás seguro de haber puesto el atributo 'parent = 'android: style/Theme.Dialog" 'en la etiqueta de estilo? intente sin el elemento 'windowNoTitle' .. – Ronnie

+0

Hey cambie' Theme.dialog' a 'android: Theme.Holo.Dialog' equivalent. Este es el tema de diálogo predeterminado para las aplicaciones dirigidas a Honeycomb o más nuevas. 'Theme.dialog' se informa como roto ... – Ronnie

1

Estoy luchando con el mismo problema aquí y encontré dos enfoques diferentes hasta ahora.

El primero que describí here es el que utilicé.

También hubo this respuesta que se ve muy similar a la primera.

El gran problema parece ser que se supone que ActionBar solo se usa en un diseño de pantalla completa, por lo que cualquier cosa que intente aplicar un diseño de tipo de cuadro de diálogo provocará una excepción. Es por eso que ambos establecen el ancho en this.getWindow().setAttributes con un valor fijo para evitar el problema.

Esa fue la conclusión a la que se me ocurrió, espero que ayude a cualquiera que esté buscando esto, ya que esta es una pregunta muy antigua.

Cuestiones relacionadas