10

我有一个列表片段(导入 v4 支持库,构建目标是 2.3.3 api 11)和我的代码中的以下问题,当目标是 3.0 并且我没有使用该库时工作正常。

Fragment frag1 = new ExampleFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.contentframe, frag1);
ft.commit();

现在我得到了编译错误

"Type mismatch: cannot convert from ExampleFragment to Fragment"

它告诉我将“片段”更改为 ExampleFragment (例如)

ExamplesFragment frag1 = new ExamplesFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.contentframe, frag1);
ft.commit();

然后我有一个问题,ft.replace命令有错误:

The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment_PVAnn)

它告诉我将第一行中的 ExamplesFragment 改回 Fragment ,所以圆圈转了一圈

4

2 回答 2

27

你应该使用

getActivity().getSupportFragmentManager()

如果这仍然给您带来问题,那么请确保您的Activity extends FragmentActivity.

如果这仍然给您带来问题,

  1. 删除所有导入,
  2. Ctrl使用++重新导入ShiftO并且
  3. 在每次名称冲突时,请确保您从 导入support.v4.*而不是 android.*.
于 2012-06-26T13:32:16.063 回答
2

您必须确保当您扩展时Fragment,您正在扩展包空间Fragment中的那个。v4检查您的导入是否有FragmentFragmentActivity等,如果您在包名称中看到它们导入时没有 .v4,那么这是错误的。

此外,如果您将项目的 android 库设置为 2.3 而不是 4.0.x,那么您将很快看到您是否使用了不正确的类,因为您会得到编译错误,这可以通过使用 v4 类来修复来自 android support jar(希望你也包含在你的项目中)

于 2012-06-26T13:32:47.143 回答