findFragmentById 时出现 NullpointerException

NullpointerException when findFragmentById

我有一个 Activity,其中包含一个 片段

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 Activity的代码:

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

你应该搬家

 setContentView(R.layout.activity_main);

之前

  Fragment contentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_content);

你得到 NPE 因为 findFragmentById(R.id.fragment_content) 找不到 ID 为 fragment_content.[=14= 的 片段 ]

在将片段添加到 activity 之前,您不能执行 findFragmentById。当您制作 setContentView 时,Actvitiy 会扩充布局并将其视图添加到当前 window。如果此布局中有 Fragment,则将其与 xml 中提供的给定 ID 或标签一起添加到 FragmentManager。只有在这一刻,你才能在那里找到它。所以你要做的就是将 findFragmentById 移到 setContentView.

下面