我有一个简单的 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
}
}
然后我更换了
import android.app.FragmentManager;
和
import android.support.v4.app.FragmentManager;
因此我可以支持较旧的设备。但是,这将报告错误:
Incompatible types.
Required: android.support.v4.app.FragmentManager
Found: android.app.FragmentManager
我在这里做错了什么?
我发现的流行解决方案是改用getSupportFragmentManager(),但这仅适用于ActionBarActivites [edit-查看答案]和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上,但是(对我来说)很难找到。最小的示例也应该帮助其他人理解它。
最佳答案
在第一种情况下,如果您使用getSupportFragmentManager()
,则需要扩展FragmentActivity
或扩展ActionBarActivity
(扩展FragmentActivity),因为FragmentActivity
是基于支持的片段的基类。
在第二种情况下,您需要使用getSupportFragmentManager()
而不是getFragmentManager()
。
将碎片引入蜂窝中。为了支持蜂窝下面的片段,您需要使用支持库中的片段,在这种情况下,您需要扩展FragmentActivity
并使用getSupportFragmentManager()
。
关于android - 具有Activity的v4 getFragmentManager-不兼容的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25321222/