在Fragment中无法解析方法'getSupportFragmentManager()'

57

我发现了这个消息:Cannot resolve method 'getSupportFragmentManager()' 我想将Fragment作为Activity使用。 因为我想在选项卡滑动上使用地图。

public class PETAcikarangsukatani extends Fragment {
Context context;

private static final LatLng SUKATANI = new LatLng(-6.171327, 107.178108);
private static final LatLng WRPOJOK = new LatLng(-6.222411, 107.162158);
private static final LatLng PILAR = new LatLng(-6.257033, 107.156472);
private static final LatLng CIKARANG = new LatLng(-6.256073, 107.143984);


GoogleMap googleMap;
final String TAG = "PathGoogleMapActivity";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.activity_path_google_map, container, false);
    context = rootView.getContext();

    SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager()
            .findFragmentById(R.id.map);
    googleMap = fm.getMap();

Map是一个容器还是一个片段? - Merlí Escarpenter Pérez
可能是重复的问题:如何在片段中访问getSupportFragmentManager()? - blahdiblah
请查看以下链接,其中详细解释了此内容:https://www.youtube.com/watch?v=JWk3PXV6O98 - Samrat Das
14个回答

97
Fragment 子类中,您需要使用 getFragmentManager 替换 getSupportFragmentManager 。如果导入来自支持库,则会得到支持版本。

它是什么意思,“但仍未运行”? - Blackbelt
1
还有,你需要在fragment的xml文件中进行更改,将android:name="com.google.android.gms.maps.SupportMapFragment"改为android:name="com.google.android.gms.maps.MapFragment"。 - Rahul Sharma
1
考虑在片段中使用getChildFragmentManager()而不是getFragmentManager()或getSupportFragmentManager()。 - ngaspama

50

对于我的情况,我确保从以下位置导入Fragment类:

 

android.support.v4.app.Fragment

而不是从以下位置:

 

android.app.Fragment

然后我使用了以下代码:

 

getActivity().getSupportFragmentManager();

现在它可以工作了。如果我使用在 onAttach() 中获取的 activity 实例,则无法正常工作。


这是一个重要的提示:您必须添加v4安卓支持才能工作。 - Machado

41

使用FragmentActivity代替Activity


1
正如您所看到的,主题发起者询问的是“Fragment”问题,而不是“Activity”问题。 - Andrey Kopeyko
1
你救了我的一天。非常感谢你 :) - Francisco Romero
糟糕!你没有直接回答提问者的问题,而是回答了我的问题!不过你解决了它。谢谢你 +1。 - inverted_index
你也可以使用AppCompatActivity。 - Kyo Huu
谢谢!它正在工作。我的类已经继承自FragmentActivity,编译也顺利结束了。 - Orlov Const

18
使用getActivity().getSupportFragmentManager()

16

getSupportFragmentManager()替换为getFragmentManager(), 如果您正在使用API 21。 或者 如果您的应用程序支持早于3.0版本的Android,请确保按照《设置项目以使用库》中所述设置了Android项目,并这一次使用 getSupportFragmentManager()


欢迎来到 StackOverflow。也许您想阅读我们的编辑帮助,以改善您的文章格式(尤其是关于代码段的部分)。 - user1438038

8

同时,您可以使用AppCompatActivity代替Activity。
然后getSupportFragmentManager()就会起作用。
在这种情况下,还要记得使您的应用程序主题扩展AppCompat主题。


5
根据文档,getSupportFragmentManager() 只存在于 AppCompatActivity 类中,而不是 Activity 类中。因此,请确保您的类扩展 AppCompatActivity 类。
public class MainActivity extends AppCompatActivity {
}

3

getFragmentManager()

只需尝试此方法,它适用于我的情况。


3

getSupportFragmentManager() 不是 Fragment 的一部分,所以你不能通过这种方式在此处获取它。你可以从父 Activity 中获取它(因此在 onAttach() 中最早使用正常方法)。

activity.getSupportFragmentManager();

或者你可以尝试使用getChildFragmentManager(),它在Fragment的范围内,但需要API17+。


2

你应该使用

getActivity.getSupportFragmentManager() like
//in my fragment 
SupportMapFragment fm = (SupportMapFragment)    
getActivity().getSupportFragmentManager().findFragmentById(R.id.map);

我也遇到了这个问题,但在getSupportFragmentManager之前添加getActivity()后解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接