带有ActionBarCompat的android 2.3.3(但不是4.3)中的空白片段

带有ActionBarCompat的android 2.3.3(但不是4.3)中的空白片段,android,android-fragments,android-actionbar,android-actionbar-compat,Android,Android Fragments,Android Actionbar,Android Actionbar Compat,} 当我在4.3模拟器中运行这段代码时,我得到了所需的“helloworld!”消息。然而,在2.3.3模拟器中,我看到了一个空白屏幕(ActionBar确实显示出来)。显然,这是安卓2.3及以下版本的一个已知错误。这有一个归档的bug v19之前版本的支持库解决方案: 尝试为活动创建一个XML布局(即只创建一个视图组,如线性布局或相对布局,并给它一个id)。然后在活动的onCreate()中调用setContentView(R.layout.newLayout)。然后使用视图组的id作为Fra

}


当我在4.3模拟器中运行这段代码时,我得到了所需的“helloworld!”消息。然而,在2.3.3模拟器中,我看到了一个空白屏幕(ActionBar确实显示出来)。

显然,这是安卓2.3及以下版本的一个已知错误。这有一个归档的bug

v19之前版本的支持库解决方案:

尝试为
活动
创建一个XML布局(即只创建一个
视图组
,如
线性布局
相对布局
,并给它一个id)。然后在
活动
onCreate()中调用
setContentView(R.layout.newLayout)
。然后使用
视图组的id
作为
FragmentTransaction.add()
的第一个参数

从支持库版本19起,此问题已得到解决。如果使用SDK管理器更新到支持库的最新版本,则代码应该可以正常工作


您也可能会发现上面链接上的第6篇文章很有帮助。

可能是
getSupportFragmentManager()。findFragmentById(android.R.id.content)
在2.3.3上不会导致
null
?是否有logcat输出?它确实会导致null。我使用的是支持库的修订版19。它是最新版本吗?你试过我建议的第一种方法了吗?这是最新的版本。如果没有别的办法,我会试试你的方法,因为我觉得你的方法行得通。为什么?因为在Android Studio中创建新项目并单击复选框以包含ActionBar和片段时,它会自动生成与您所说的非常相似的内容。尽管如此,我的所有代码都在ActionBarSherlock中使用了上述方法,我认为这应该适用于Compat。另外,请查看我发布的链接上的第6篇文章。太棒了,你能将其添加到你的答案中吗?
package com.example.app;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, new PlaceholderFragment()).commit();
    }
}
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }
}