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

时间:2014-08-15 04:23:02

标签: android android-activity fragment

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

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
    }
}
然后我替换了

import android.app.FragmentManager;

import android.support.v4.app.FragmentManager;

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

Incompatible types.

    Required: android.support.v4.app.FragmentManager

    Found: android.app.FragmentManager

我在这里做错了什么?

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

cannot convert from android.app.FragmentManager to android.support.v4.app.FragmentManager

其他相关解决方案指向使用FragmentActivity,但这似乎有相同的遗留问题。

The method getFragmentManager() is undefined for the type MyActivity

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();
    }
}

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

  • 我对Android很新。

4 个答案:

答案 0 :(得分:50)

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

在第二种情况下,您需要使用getSupportFragmentManager()代替getFragmentManager()

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

答案 1 :(得分:4)

use getSupportFragmentManager() instead, but this only works for ActionBarActivites.

错误,它应该在您的FragmentActivity中,FragmentActivity在您的支持包中,当您支持旧设备,然后从activityfragment,{{1必须有fragment managers来指定您正在使用支持包。如果不使用,将导致android.support.v4.

incompatible compile time error.

正如我上面所述,您正在将支持包与非支持包相结合,产生于What am I doing wrong here?

答案 2 :(得分:1)

对于Kotlin guyz你不必改为v4

使用下面的内容来获取活动的长度

(activity as MainDrawerActivity)

((YourActivityName)getActivity());

答案 3 :(得分:0)

用于Java对话框:

 - import android.app.FragmentManager;
 - FragmentManager fragmentManager;

对于Kotlin:

 - (activity as? YourActivity)?.fragmentManager