getSupportFragmentManager无法分配给FragmentManager

use*_*260 3 android android-fragments android-fragmentactivity

我正在编写我的第一个使用Android编程教程中使用片段的应用程序:Big Nerd Ranch Guide.

我创建了一个片段和相应的布局,现在我想将片段管理器添加到将使用它的父级.

我写了这个:

FragmentManager fm = getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud)

但android studio给了我这个错误:

Error:(19, 51) error: incompatible types
required: android.app.FragmentManager
found:    android.support.v4.app.FragmentManager
Run Code Online (Sandbox Code Playgroud)

我不明白......我的印象是FragmentManager可以来自支持库,取决于你是否要支持pre-API 11版本.

改变了什么?

这些是我的进口:

import android.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
Run Code Online (Sandbox Code Playgroud)

当我改变时:

import android.app.FragmentManager;
Run Code Online (Sandbox Code Playgroud)

至

import android.support.v4.app.FragmentManager;
Run Code Online (Sandbox Code Playgroud)

我在识别片段类时遇到错误;

这是相关代码:

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

if (fragment == null){
   fragment = new CrimeFragment();
   fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
}
Run Code Online (Sandbox Code Playgroud)

并且错误是突出显示行if(fragment == null){

并说:

unknown class: 'fragment'
Run Code Online (Sandbox Code Playgroud)

还有几个

unexpected token
Run Code Online (Sandbox Code Playgroud)

在if语句的每个括号上和a

unexpected identifier
Run Code Online (Sandbox Code Playgroud)

在双等于.

到底是怎么回事?

Mar*_*ius 6

只需 import android.app.FragmentManager;改为import android.support.v4.app.FragmentManager;

对于编辑过的问题:检查代码的放置位置并仔细检查这些多个括号.通过将代码放在任何方法之外,我能够重现您的问题:

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

if (fragment == null){
    fragment = new CrimeFragment();
    fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_profile_holder, container, false);
}
Run Code Online (Sandbox Code Playgroud)