AppCompat操作栏库未显示已添加的片段

7

编辑:如果我继承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>

Activity 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.+'
1个回答

11

在Android SDK的tools目录下加载 hierarchyviewer,可以看到你放置fragment的视图是4.x设备上的android.R.id.content,而在运行了AppCompat ActionBar库的2.3设备上则是R.id.action_bar_activity_content

不幸的是,似乎需要根据平台版本进行分支处理,才能添加fragment。这在http://code.google.com/p/android/issues/detail?id=58108中有所建议(尚不确定3.x设备情况)。

使用此方法获取适当的视图以添加Fragment。我的测试还显示,当使用AppCompat ActionBar库时,3.x设备表现类似于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

2.3

  • 4.x

4.x


@AustynMahoney 我在我的片段代码中加入了getContentViewCompat,并将片段代码移动到onCreateOptionsMenu中,这样它就可以在2.3和4.0上运行了??? 但我真的不喜欢这种解决方法。 - danny117
1
这也修复了在Android 2.3上出现内容似乎出现在ActionBar上方的问题--感谢注意到这个问题! - Stephan
3
如果你将appcompat-v7更新到19.0.0版本或更高版本,则无需在android.R.id.contentR.id.action_bar_activity_content之间切换。最新版本的库统一了不同的行为,可以在Chris Banes在问题59077的评论中阅读到相关信息。 - JJD
1
看起来即使在appcompat-v7修订19.0.0之后,2.x设备仍然不会添加片段,除非您设置内容视图(我只是使用一个空的帧布局)。关于不再需要R.id.action_bar_activity_content的部分是正确的,但在2.x设备上,它将悄悄地无法添加片段。 - rrbrambley
1
@rrbrambley 请在错误跟踪器上报告此问题。原始错误尚未关闭:https://code.google.com/p/android/issues/detail?id=59077 - Austyn Mahoney
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接