findFragmentById时出现NullpointerException

时间:2015-03-22 11:22:11

标签: android android-intent android-fragments android-activity

我有活动,其中包含片段

活动布局文件:

<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 ,为什么?

2 个答案:

答案 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下方。