【问题标题】:Cannot cast from Fragment to MapFragment无法从 Fragment 转换为 MapFragment
【发布时间】:2014-05-29 13:18:49
【问题描述】:

我在使用地图片段时遇到问题。错误消息是 无法从 Fragment 转换为 MapFragment。我尝试将extends FragmentActivityGoogleMap map = ((SupportMapFragment) getSupportFragmentManager() 一起更改为GoogleMap map = ((SupportMapFragment) getSupportFragmentManager(),但这导致我的onCreateView 代码行出现问题。

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class Fragment01 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_01, container, false);

    // Get a handle to the Map Fragment
    GoogleMap map = ((MapFragment) getFragmentManager()
            .findFragmentById(R.id.map)).getMap();

    LatLng sydney = new LatLng(-33.867, 151.206);

    map.setMyLocationEnabled(true);
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

    map.addMarker(new MarkerOptions()
            .title("Sydney")
            .snippet("The most populous city in Australia.")
            .position(sydney));
}

}

【问题讨论】:

    标签: android android-fragments android-maps-v2


    【解决方案1】:

    替换

    getFragmentManager
    

    getSupportFragmentManager
    

    getFragmentManager 返回 androids api fragment(从 v11+ 开始可用) 类的实例,但是你已经导入了 android.support.v4.app.Fragment

    所以要么打电话给getSupportFragmentManager 要么改变端口。

    getSupportFragmentManager 仅在 FragmentActivity 类中可用。

    所以你需要先把这个片段放在FragmentActivity(范围FragmentActivity而不是Activity)中,然后在片段的onActivityCreated方法中获取活动引用并调用getSupportFragmentManager。例如

    myContext.getSupportFragmentManager(); 
    

    参考: How can I access getSupportFragmentManager() in a fragment?

    【讨论】:

    • 是的,我已经尝试过了,但我收到一个错误提示 方法 getSupportFragmentManager() 未定义类型 Fragment01?
    • 检查我的编辑。谷歌“getsupportfragmentmanager in fragment”以了解更多有关如何操作的信息。
    • 不幸的是,我不能使用FragmentActivity 类,只能使用Fragment 类,否则我的MainActivity 中的onSelectFragment 部分会一团糟。我找到了另一个我正在测试的解决方案。
    【解决方案2】:

    试试这些代码行,它们可能对你有帮助:

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    supportMapFragment = (SupportMapFragment) fragmentManager.findFragmentById(R.id.map);
    Google_Map = supportMapFragment.getMap();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多