无法将MapFragment强制转换为android.support.v4.app.Fragment(HERE MAP API移动版) [英] MapFragment can't be cast to android.support.v4.app.Fragment (HERE MAP API Mobile)

查看:67
本文介绍了无法将MapFragment强制转换为android.support.v4.app.Fragment(HERE MAP API移动版)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 MAP API for Mobile时遇到了MapFragment的某些错误.我将尝试在FragmentTabHost中添加MapFragment和我的MapFragment类,我使用FragmentActivity类的名称是"EventMap".我的应用程序是这样的:我有mainActivity是一个ActionBarActivity,当我从中单击菜单时,该应用程序将转到FragmentTabHost.在FragmentTabHost,我有两个选项卡,第一个选项卡是ListFragment,用于显示我的数据,第二个选项卡是EventMap.class.现在,当我运行应用程序并转到EventMap时,出现错误,请查看此错误日志:

I have some error with MapFragment i use HERE MAP API for Mobile. I'll try to add MapFragment in FragmentTabHost and my MapFragment Class I'm use FragmentActivity class name is "EventMap" My app is going like this:i have mainActivity is a ActionBarActivity and when i click a menu from this the app is going to FragmentTabHost. At FragmentTabHost i have two tab frist tab is a ListFragment for show my data and second is a EventMap.class.Now when i run the app and go to EventMap i got the error Please see this error log:

10-12 11:48:20.681: E/AndroidRuntime(2894): FATAL EXCEPTION: main
10-12 11:48:20.681: E/AndroidRuntime(2894): Process: mpa.demo.bkklife, PID: 2894
10-12 11:48:20.681: E/AndroidRuntime(2894): java.lang.ClassCastException: mpa.demo.bkklife.EventMap cannot be cast to android.support.v4.app.Fragment
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.support.v4.app.Fragment.instantiate(Fragment.java:423)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.support.v4.app.FragmentTabHost.doTabChanged(FragmentTabHost.java:343)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.support.v4.app.FragmentTabHost.onTabChanged(FragmentTabHost.java:311)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:473)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.widget.TabHost.setCurrentTab(TabHost.java:453)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:176)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:646)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.view.View.performClick(View.java:5184)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.view.View$PerformClick.run(View.java:20910)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.os.Handler.handleCallback(Handler.java:739)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.os.Handler.dispatchMessage(Handler.java:95)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.os.Looper.loop(Looper.java:145)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at android.app.ActivityThread.main(ActivityThread.java:5942)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at java.lang.reflect.Method.invoke(Native Method)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at java.lang.reflect.Method.invoke(Method.java:372)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
10-12 11:48:20.681: E/AndroidRuntime(2894):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

好的,请参阅我的代码,这是一个 FragmentTabHost className:EventFragment

Ok so see my code this is a FragmentTabHost className:EventFragment

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class EventFragment extends Fragment{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub
        super.onDestroyView();
        mTabHost = null;
    }

    private FragmentTabHost mTabHost;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.fragment_event);

        mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("รายการแจ้งเหตุ"),
                EventListView.class, null);

        mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("แผนที่"),EventMap.class,null);

        return mTabHost;
    }



    public EventFragment() {
        // TODO Auto-generated constructor stub
    }

}

这是 EventMap.class :

import com.here.android.mpa.common.GeoCoordinate;
import com.here.android.mpa.common.OnEngineInitListener;
import com.here.android.mpa.mapping.Map;
import com.here.android.mpa.mapping.MapFragment;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class EventMap extends FragmentActivity {
    // map embedded in the map fragment
    private Map map = null;
    // map fragment embedded in this activity
    private MapFragment mapFragment = null;

    public EventMap() {
        // TODO Auto-generated constructor stub
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_map);
        if(map == null || mapFragment == null){
            init();
        }
    }

    public void init(){
        mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapfragment);
        mapFragment.init(new OnEngineInitListener() {
            @Override
            public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
                if (error == OnEngineInitListener.Error.NONE) {
                    // retrieve a reference of the map from the map fragment
                    map = mapFragment.getMap();
                    // Set the map center coordinate to the Vancouver region (no animation)
                    map.setCenter(new GeoCoordinate(49.196261, -123.004773, 0.0), Map.Animation.NONE);
                    // Set the map zoom level to the average between min and max (no animation)
                    map.setZoomLevel((map.getMaxZoomLevel() + map.getMinZoomLevel()) / 2);

                } else {
                    System.out.println("ERROR: Cannot initialize Map Fragment:"+error.toString());
                }
            }
        });
    }




}

此错误我想念的东西.

推荐答案

您使用此

 // Obtain the SupportMapFragment and get notified when the map is ready to be used.



    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

实现OnMapReadyCallback接口和重写方法

Implement OnMapReadyCallback interface and override method

  @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
   // do somthing
 }

这篇关于无法将MapFragment强制转换为android.support.v4.app.Fragment(HERE MAP API移动版)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆