Java 为什么findFragmentById总是返回null

Java 为什么findFragmentById总是返回null,java,android,android-fragments,fragment,fragmentmanager,Java,Android,Android Fragments,Fragment,Fragmentmanager,我正在尝试使用findFragmentById获取片段,但每次我在其位置获取null时,我也尝试使用findFragmentByTag并将标记添加到我的add事务中,但这也是一样的 下面的代码是一个修改过的空白起始模板(为了简单起见) 公共类MainActivity扩展了活动{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); setContentView(R.

我正在尝试使用findFragmentById获取片段,但每次我在其位置获取null时,我也尝试使用findFragmentByTag并将标记添加到我的add事务中,但这也是一样的

下面的代码是一个修改过的空白起始模板(为了简单起见)

公共类MainActivity扩展了活动{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);

    if (placeholderFragment == null) {
        Log.i("TAG", "placeholderFragment is null");
    } else {
        Log.i("TAG", "placeholderFragment is not null");
    }
}

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

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

我尝试用
add(R.id.container,new PlaceholderFragment(),“TAG”)替换add
,然后尝试用
findFragmentByTag(“TAG”)
访问它,但也没有成功


如何使我的代码按预期工作?

我认为问题在于,在添加
片段后,您正试图立即找到它。在那短短的时间里,
片段
可能还没有添加

你能做的是,当你添加片段时,你已经拥有了它

findFragmentById()
函数通常用于在添加了一段时间后访问其他函数中的
片段

这里有一个例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}

我认为问题在于,在添加
片段之后,您试图立即找到它。在那短短的时间里,
片段
可能还没有添加

你能做的是,当你添加片段时,你已经拥有了它

findFragmentById()
函数通常用于在添加了一段时间后访问其他函数中的
片段

这里有一个例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}

我认为问题在于,在添加
片段之后,您试图立即找到它。在那短短的时间里,
片段
可能还没有添加

你能做的是,当你添加片段时,你已经拥有了它

findFragmentById()
函数通常用于在添加了一段时间后访问其他函数中的
片段

这里有一个例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}

我认为问题在于,在添加
片段之后,您试图立即找到它。在那短短的时间里,
片段
可能还没有添加

你能做的是,当你添加片段时,你已经拥有了它

findFragmentById()
函数通常用于在添加了一段时间后访问其他函数中的
片段

这里有一个例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}