【问题标题】:AppCompat Action Bar library not displaying added fragmentsAppCompat 操作栏库不显示添加的片段
【发布时间】:2013-08-02 15:43:11
【问题描述】:

编辑:如果我扩展FragmentActivity 而不是ActionBarActivity,我的布局会再次出现(当然没有ActionBar)。

ActionBar4.x 设备上按预期工作,但在我的2.3 设备上,我得到的只是ActionBar 和它下方的空白屏幕Fragment 似乎没有被添加到 Activity

themes.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="actionBarStyle">@style/Widget.ActionBar</item>
</style>

themes-v11.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
</style>

styles.xml

<style name="Widget.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="android:background">@color/actionbar_background</item>
    <item name="background">@color/actionbar_background</item>
</style>

活动onCreate()

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
myFragment = new WallFragment();
fragmentTransaction.add(android.R.id.content, 
    myFragment, myFragment.FRAGMENT_TAG);
fragmentTransaction.commit();

我正在使用 Gradle 在我的应用中包含 AppCompat ActionBar 库。

compile 'com.android.support:appcompat-v7:18.0.+'

【问题讨论】:

    标签: android android-fragments fragmenttransaction android-actionbar-compat


    【解决方案1】:

    在 Android SDK 的工具目录中加载 hierarchyviewer,看起来您放置片段的视图在 4.x 设备上是 android.R.id.content,在运行 AppCompat ActionBar 库的 2.3 设备上是 R.id.action_bar_activity_content

    不幸的是,在添加片段时,您可能需要基于平台版本进行分支。这是在 http://code.google.com/p/android/issues/detail?id=58108 中建议的(还不确定 3.x 设备)。

    使用此方法可以获得添加Fragment 的正确视图。我的测试还表明,3.x 设备在使用 AppCompat ActionBar 库时的行为类似于 2.3 设备。

    public static int getContentViewCompat() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ?
                   android.R.id.content : R.id.action_bar_activity_content;
    }
    


    hierarchyviewer 截图

    • 2.3

    • 4.x

    【讨论】:

    • 另外需要注意的是R.id.action_bar_activity_content直到setContentView()在ActionBarActivity中被调用后才会被创建。使用 ABS,我可以使用 android.R.id.content,而无需在 Activity 中设置布局,而在 Android 2.x 中不是这种情况。
    • 这也解决了当您的内容似乎出现在 Android 2.3 上的 ActionBar 上方时的问题 -- 感谢您注意到这一点!
    • @Shellum 如果您将 appcompat-v7 更新到版本 19.0.0. 或更新版本,则不再需要在 android.R.id.contentR.id.action_bar_activity_content。如您在comment of Chris Banes on issue 59077 中阅读的那样,不同的行为在最新版本的库中统一。
    • 看起来即使在 appcompat-v7 修订版 19.0.0 修复之后,2.x 设备也不会添加片段,除非您设置内容视图(我只是使用空框架布局)。关于不再需要 R.id.action_bar_activity_content 的部分是正确的,但在 2.x 设备上它会默默地无法添加片段。
    • @rrbrambley 请在错误跟踪器上报告此问题。原bug尚未关闭:code.google.com/p/android/issues/detail?id=59077
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多