对于 Fragment 类型,方法 getSupportFragmentManager() 未定义

Posted

技术标签:

【中文标题】对于 Fragment 类型,方法 getSupportFragmentManager() 未定义【英文标题】:The method getSupportFragmentManager() is undefined for the type Fragment 【发布时间】:2015-08-21 18:49:34 【问题描述】:

我在标题中描述了一个问题,目的是在片段中显示谷歌的地图。

这是fragment_inicio.xml

<fragment
    android:id="@+id/map"
    android:layout_
    android:layout_
    class="com.google.android.gms.maps.SupportMapFragment" />

这是 InicioFragment.java

public class InicioFragment extends Fragment implements OnMapClickListener 

private final LatLng UPV = new LatLng(39.481106, -0.340987);
private GoogleMap mapa;

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

    View rootView = inflater.inflate(R.layout.fragment_inicio, container,
            false);

    return rootView;


@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_inicio);

    mapa = ((SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map)).getMap();
    mapa.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(UPV, 15));
    mapa.setMyLocationEnabled(true);
    mapa.getUiSettings().setZoomControlsEnabled(false);
    mapa.getUiSettings().setCompassEnabled(true);
    mapa.addMarker(new MarkerOptions()
            .position(UPV)
            .title("UPV")
            .snippet("Universidad Politécnica de Valencia")
            .icon(BitmapDescriptorFactory
                    .fromResource(android.R.drawable.ic_menu_compass))
            .anchor(0.5f, 0.5f));
    mapa.setOnMapClickListener(this);


private void setContentView(int fragmentInicio) 
    // TODO Auto-generated method stub



public void moveCamera(View view) 
    mapa.moveCamera(CameraUpdateFactory.newLatLng(UPV));


public void animateCamera(View view) 
    if (mapa.getMyLocation() != null)
        mapa.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                mapa.getMyLocation().getLatitude(), mapa.getMyLocation()
                        .getLongitude()), 15));


public void addMarker(View view) 
    mapa.addMarker(new MarkerOptions().position(new LatLng(mapa
            .getCameraPosition().target.latitude,
            mapa.getCameraPosition().target.longitude)));


@Override
public void onMapClick(LatLng puntoPulsado) 
    mapa.addMarker(new MarkerOptions().position(puntoPulsado).icon(
            BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));


感谢您对此错误的任何帮助。

谢谢

编辑

试试你提到的我,但我仍然约会错误。

错误现在告诉我:

无法从 Fragment 转换为 SupportMapFragment

项目给了我,所以我对 appcompat_v7 和 v4 了解不多,所以我理解你的评论 v4 更好?。

这个项目被带到一个互联网的例子,只是添加了地图,现在他们说他们要离开这个位置。

这是最好的方法还是寻找另一种方法来添加带有定位的谷歌地图。

问一个带有 GoogleMap 的 Fragment 示例是不是太过分了,而不是其他请求。

【问题讨论】:

你是通过import android.support.v4.app.Fragment;导入Fragment吗? 【参考方案1】:

不要使用getSupportFragmentManager(),而是使用getFragmentManager()

看起来您使用的是 android.app.Activity 和相关的 Fragments,而不是 v4 支持库提供的支持 Activity 和 Fragments。

如果您需要使用支持片段,请参阅导入支持库片段和活动。如果不更换片段管理器

如需更多帮助,请参阅Fragment vs Support Fragments

【讨论】:

以上是关于对于 Fragment 类型,方法 getSupportFragmentManager() 未定义的主要内容,如果未能解决你的问题,请参考以下文章

FragmentTransaction 类型中的方法 add(int, Fragment, String) 不适用于参数 (int, Fragment, String)

FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)

Fragment类实现

Android学习笔记(十四)——在执行时加入碎片(附源代码)

如何修复错误:不兼容的类型:tab1 无法转换为 Fragment?

关于TabLayout与ViewPager在Fragment中嵌套Fragment使用或配合使用的思考