我有活动,其中包含片段。
活动布局文件:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.my.ContentFragment"
android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
活动的Java代码:
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
public class ContentActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//data from previous Activity
Bundle data = getIntent().getExtras();
Fragment contentFragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_content);
//Pass data to fragment
/*NullpointerException, contentFragment is null!*/
contentFragment.setArguments(data);
setContentView(R.layout.activity_main);
}
...
}
我尝试在Activity的onCreate()
中找到该片段,然后将一些数据传递给它。但是当我findFragmentById(...)
时,我得到 NullpointerException ,为什么?
答案 0 :(得分:1)
你应该移动
setContentView(R.layout.activity_main);
之前
Fragment contentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_content);
您有 NPE ,因为findFragmentById(R.id.fragment_content)
未能找到ID为fragment_content
的片段。
答案 1 :(得分:0)
在将片段添加到您的活动之前,您无法执行findFragmentById
。当您setContentView
时,Actvitiy
会使布局膨胀并将其视图添加到当前窗口。如果在此布局中包含Fragment
,则会将xml中提供的给定ID或标记添加到FragmentManager
。只有在这一刻你才能在那里找到它。因此,您需要将findFragmentById
移到setContentView
下方。