[英]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.