带选项卡的活动对话框

时间:2012-04-23 16:13:42

标签: android-actionbar android android-tabs

我正在为标签构建应用程序。

  1. 点击按钮我试图以主题@android:style/Theme.Dialog
  2. 显示活动(说 A
  3. 内部活动 A 我正在创建操作栏并添加4个标签。
  4. 点击标签我想更改片段。
  5. 在我不应用主题@android:style/Theme.Dialog之前,一切正常 应用主题后我得到例外:

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

    在以下行:

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

    我有两个问题:

    1。如果我应用主题对话框会出现什么问题?

    2。我的做法是对的吗?

    如果有人知道另一种方法,请告诉我。

    EDIT1: * 清单文件 *

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

2 个答案:

答案 0 :(得分:1)

我在这里遇到同样的问题,到目前为止找到了两种不同的方法。

第一个描述here是我使用的那个。

还有this的答案与第一个答案非常相似。

最大的问题似乎是ActionBar只应该在全屏布局上使用,所以任何试图应用Dialog类型布局的东西都会导致异常。这就是为什么他们都将this.getWindow().setAttributes的宽度设置为固定值,以解决问题。

这是我想出的结论,希望它可以帮助其他人寻找这个,因为这是一个非常古老的问题。

答案 1 :(得分:0)

您可以通过覆盖操作栏不需要的对话框属性来创建自定义对话框主题。还要为其添加android:windowActionBar属性。

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