繁体   English   中英

如何在Android中将活动的根视图设置为片段?

[英]How to set an Activity's root view as fragment in Android?

我有一个片段,我想将整个片段设置为活动的根视图。 我已经准备好一切,并且正在以编程方式实例化片段。 我已经尝试过(在我的活动中):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FeedFragment fragment = [...];
    setContentView(fragment.getView());
}

但是我有一个空指针异常。 换句话说,如何使我的片段表现得像活动? 我只针对ICS +,如果有任何不同,我不需要支持旧版本。

尝试这个

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

     ......

    return rootView;
   }
@Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
  setContentView(R.layout.xxx);
  //initializations...    
    if (savedInstanceState == null) {
        // During initial setup, plug in the fragment.
        YourFragment details = new YourFragment();
        getFragmentManager().beginTransaction().add(R.id.your_root_frame_layout, details).commit();
    }
}

通过设计,片段旨在用作帮助您重用屏幕空间的工具,因此,片段必须存在于容器内。 因此,虽然片段从技术上讲不能成为根视图,但您可以让片段成为Activity中的唯一视图。 为此,您应该以编程方式在片段的onCreateView()方法内为片段的视图充气。 那么您可以在活动的布局xml中添加以下内容:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.package.fragment_name
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

</FrameLayout>

然后,在您的活动中,您要做的就是:

setContentView(R.layout.main);

由于该片段是在布局xml中定义的,因此无法将其从活动的布局中删除(尽管可以更改布局本身)并将其绑定。

另外,请注意,根视图是FrameLayout,而不是片段本身。 但是通过这种方式,您的片段可以绑定到活动。 但是不要忘记,Fragment仍将保留其活动的生命周期。

编辑:如果您需要以编程方式创建片段实例,则必须执行以下操作:

getFragmentManager().beginTransaction().add(R.id.frame_layout, your_fragment).commit();

这是以编程方式添加片段的唯一方法。 但也要记住,Fragment的布局不与活动的布局绑定。 但是您可以使用Fragment的生命周期,使其行为类似于Activity。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM