v4带活动的getFragmentManager - 不兼容的类型

Dav*_*vid 22 android fragment android-activity

我有一个按预期运行的简单活动.

import android.app.Activity;
import android.app.FragmentManager;
// import android.support.v4.app.FragmentManager;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity
        FragmentManager fm = getFragmentManager(); // Activity
    }
}
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)

所以我可以支持我的旧设备..但是,这报告错误:

Incompatible types.

    Required: android.support.v4.app.FragmentManager

    Found: android.app.FragmentManager
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

我发现流行的解决方案是使用getSupportFragmentManager(),但这仅适用于ActionBarActivites [编辑 - 请参阅答案]和FragmentActivities.

无法从android.app.FragmentManager转换为android.support.v4.app.FragmentManager

另一个相关的解决方案指向使用FragmentActivity,但这似乎有相同的遗留问题.

对于MyActivity类型,未定义getFragmentManager()方法

import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

    public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        // FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity
        FragmentManager fm = getFragmentManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

我很确定这个问题的解决方案已经在SE上了,但找到它并不容易(对我来说).最小的例子也应该帮助其他人理解它.

  • 我对Android很新.

Rag*_*dan 52

在您的第一种情况下,如果您使用,getSupportFragmentManager()您需要扩展FragmentActivity或扩展ActionBarActivity(扩展FragmentActivity),因为FragmentActivity基于支持的片段的基类.

在你的第二种情况下,你需要使用getSupportFragmentManager()而不是getFragmentManager().

碎片以蜂窝形式引入.要支持蜂窝以下的片段,您需要使用支持库中的片段,在这种情况下需要扩展FragmentActivity和使用getSupportFragmentManager().