问题与NoSaveStateFramelayout [英] issue with NoSaveStateFramelayout

查看:133
本文介绍了问题与NoSaveStateFramelayout的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个应用程序在whcih我有integerate福尔摩斯动作条与Fragment.there是两个标签,一是地图和二是上市。对于第一张地图选项卡我想把MapsForge开源库基地地图在这首Tab.I已经得到举例MapsForge从的 GIT从这里我试图实现它。但是它让我 NoSaveStateFramelayout

错误:

  12-03 18:48:49.210:E / AndroidRuntime(2779):致命异常:主要
12-03 18:48:49.210:E / AndroidRuntime(2779):java.lang.ClassCastException:android.support.v4.app.NoSaveStateFrameLayout不能转换为com.jakewharton.android.mapsforge_fragment.MapView
12-03 18:48:49.210:E / AndroidRuntime(2779):在in.wptrafficanalyzer.actionbarsherlocknavtab.MapFragment.getView(MapFragment.java:32)
12-03 18:48:49.210:E / AndroidRuntime(2779):在in.wptrafficanalyzer.actionbarsherlocknavtab.MapFragment.getView(MapFragment.java:1)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.support.v4.app.FragmentPagerAdapter.isViewFromObject(FragmentPagerAdapter.java:147)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.support.v4.view.ViewPager.infoForChild(ViewPager.java:1258)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.support.v4.view.ViewPager.populate(ViewPager.java:1031)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.support.v4.view.ViewPager.populate(ViewPager.java:881)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.View.measure(View.java:12775)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:594)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.View.measure(View.java:12775)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4709)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.View.measure(View.java:12775)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.View.measure(View.java:12775)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4709)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
12-03 18:48:49.210:E / AndroidRuntime(2779):在com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2240)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.View.measure(View.java:12775)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1117)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.os.Handler.dispatchMessage(Handler.java:99)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.os.Looper.loop(Looper.java:137)
12-03 18:48:49.210:E / AndroidRuntime(2779):在android.app.ActivityThread.main(ActivityThread.java:4514)
12-03 18:48:49.210:E / AndroidRuntime(2779):在java.lang.reflect.Method.invokeNative(本机方法)
12-03 18:48:49.210:E / AndroidRuntime(2779):在java.lang.reflect.Method.invoke(Method.java:511)
12-03 18:48:49.210:E / AndroidRuntime(2779):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:790)
12-03 18:48:49.210:E / AndroidRuntime(2779):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-03 18:48:49.210:E / AndroidRuntime(2779):在dalvik.system.NativeStart.main(本机方法)

code:

MapFragment:

 包in.wptrafficanalyzer.actionbarsherlocknavtab;
进口android.os.Bundle;
进口android.os.Environment;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.ViewGroup;进口com.jakewharton.android.mapsforge_fragment.GeoPoint;
进口com.jakewharton.android.mapsforge_fragment.MapView;
进口com.jakewharton.android.mapsforge_fragment.MapViewMode;公共类MapFragment扩展片段{
    私有静态最后弦乐KEY_LATITUDE_E6 =MapFragment:LatitudeE6
    私有静态最后弦乐KEY_LONGITUDE_E6 =MapFragment:LongitudeE6
    私有静态最后弦乐KEY_ZOOM_LEVEL =MapFragment:缩放级别;
    私有静态最后弦乐KEY_MAP_FILE = Environment.getExternalStorageDirectory()+/great_britain.map    私人最终MapViewMode mMapViewMode;
    公共MapFragment(){
        这个(MapView.DEFAULT_MAP_VIEW_MODE);
    }    公共MapFragment(MapViewMode mapViewMode){
        mMapViewMode = mapViewMode;
    }
    @覆盖
    公共MapView的getView(){
        回报(MapView类)super.getView();
    }    @覆盖
    公共图形页面onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
        MapView类MapView类=新的图形页面(getActivity(),mMapViewMode);
        如果(savedInstanceState!= NULL)
        {
            最终诠释纬度= savedInstanceState.getInt(KE​​Y_LATITUDE_E6,Integer.MIN_VALUE的);
            最终诠释经度= savedInstanceState.getInt(KE​​Y_LONGITUDE_E6,Integer.MIN_VALUE的);
            最后一个字节变焦= savedInstanceState.getByte(KEY_ZOOM_LEVEL,Byte.MIN_VALUE);
            最后弦乐MAPFILE = savedInstanceState.getString(KEY_MAP_FILE);            如果((MAPFILE = NULL)及!&安培;!mapView.getMapViewMode()requiresInternetConnection()){
                mapView.setMapFileFromParcel(映射文件);
            }            如果((纬度= Integer.MIN_VALUE的)及!及(经度= Integer.MIN_VALUE的)及!&放大器;!(变焦= Byte.MIN_VALUE)){
                mapView.setCenterAndZoom(新的GeoPoint(纬度,经度),缩放);
            }
        }        返回图形页面;
    }    @覆盖
    公共无效onDestroyView(){
        super.onDestroyView();
        MapView类MapView类= getView();
        如果(图形页面!= NULL){
            mapView.destroy();
            图形页面= NULL;
        }
    }    @覆盖
    公共无效的onSaveInstanceState(捆绑outState){
        super.onSaveInstanceState(outState);        MapView类MapView类= getView();
        如果(mapView.hasVa​​lidCenter()){
            如果(mapView.getMapViewMode()requiresInternetConnection()及!及(mapView.getMapFile()=空)!){
                outState.putString(KEY_MAP_FILE,mapView.getMapFile());
            }            GeoPoint的中心= mapView.getMapCenter();
            outState.putInt(KE​​Y_LATITUDE_E6,center.getLatitudeE6());
            outState.putInt(KE​​Y_LONGITUDE_E6,center.getLongitudeE6());
            outState.putByte(KEY_ZOOM_LEVEL,mapView.getZoomLevel());
        }
    }}

更新:

 包in.wptrafficanalyzer.actionbarsherlocknavtab;
进口android.os.Bundle;
进口android.os.Environment;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.ViewGroup;进口com.jakewharton.android.mapsforge_fragment.GeoPoint;
进口com.jakewharton.android.mapsforge_fragment.MapView;
进口com.jakewharton.android.mapsforge_fragment.MapViewMode;公共类MapFragment扩展片段{
    私有静态最后弦乐KEY_LATITUDE_E6 =MapFragment:LatitudeE6
    私有静态最后弦乐KEY_LONGITUDE_E6 =MapFragment:LongitudeE6
    私有静态最后弦乐KEY_ZOOM_LEVEL =MapFragment:缩放级别;
    私有静态最后弦乐KEY_MAP_FILE = Environment.getExternalStorageDirectory()+/great_britain.map    私人最终MapViewMode mMapViewMode;
    公共MapFragment(){
        这个(MapView.DEFAULT_MAP_VIEW_MODE);
    }    公共MapFragment(MapViewMode mapViewMode){
        mMapViewMode = mapViewMode;
    }    @覆盖
    公共MapView的getView(){
        NoSaveStateFrameLayout包装=(NoSaveStateFrameLayout)super.getView();
        回报(MapView类)((包装= NULL)wrapper.getChildAt(0):!NULL);
    }    @覆盖
    公共图形页面onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
        MapView类MapView类=新的图形页面(getActivity(),mMapViewMode);
        如果(savedInstanceState!= NULL){
            最终诠释纬度= savedInstanceState.getInt(KE​​Y_LATITUDE_E6,Integer.MIN_VALUE的);
            最终诠释经度= savedInstanceState.getInt(KE​​Y_LONGITUDE_E6,Integer.MIN_VALUE的);
            最后一个字节变焦= savedInstanceState.getByte(KEY_ZOOM_LEVEL,Byte.MIN_VALUE);
            最后弦乐MAPFILE = savedInstanceState.getString(KEY_MAP_FILE);            如果((MAPFILE = NULL)及!&安培;!mapView.getMapViewMode()requiresInternetConnection()){
                mapView.setMapFileFromParcel(映射文件);
            }            如果((纬度= Integer.MIN_VALUE的)及!及(经度= Integer.MIN_VALUE的)及!&放大器;!(变焦= Byte.MIN_VALUE)){
                mapView.setCenterAndZoom(新的GeoPoint(纬度,经度),缩放);
            }
        }        返回图形页面;
    }    @覆盖
    公共无效onDestroyView(){
        super.onDestroyView();
        MapView类MapView类= getView();
        如果(图形页面!= NULL){
            mapView.destroy();
            图形页面= NULL;
        }
    }    @覆盖
    公共无效的onSaveInstanceState(捆绑outState){
        super.onSaveInstanceState(outState);        MapView类MapView类= getView();
        如果(mapView.hasVa​​lidCenter()){
            如果(mapView.getMapViewMode()requiresInternetConnection()及!及(mapView.getMapFile()=空)!){
                outState.putString(KEY_MAP_FILE,mapView.getMapFile());
            }            GeoPoint的中心= mapView.getMapCenter();
            outState.putInt(KE​​Y_LATITUDE_E6,center.getLatitudeE6());
            outState.putInt(KE​​Y_LONGITUDE_E6,center.getLongitudeE6());
            outState.putByte(KEY_ZOOM_LEVEL,mapView.getZoomLevel());
        }
    }
}


解决方案

根据您所提供的链接,在那里你去从他们的 getView()办法离开的理由?

  @覆盖
公共MapView的getView(){
    NoSaveStateFrameLayout包装=(NoSaveStateFrameLayout)super.getView();
    回报(MapView类)((包装= NULL)wrapper.getChildAt(0):!NULL);
}

I am developing one application in whcih i Have integerate Sherlock Actionbar with Fragment.there are two tab, First is Map and Second is For Listing. For First Map tab I want to Put MapsForge opensource library base Map in this First Tab.I have got Example for MapsForge with Fragment from GIt from Hereand i have tried to implement it.but it getting me Error of NoSaveStateFramelayout

Error ::

12-03 18:48:49.210: E/AndroidRuntime(2779): FATAL EXCEPTION: main
12-03 18:48:49.210: E/AndroidRuntime(2779): java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout cannot be cast to com.jakewharton.android.mapsforge_fragment.MapView
12-03 18:48:49.210: E/AndroidRuntime(2779):     at in.wptrafficanalyzer.actionbarsherlocknavtab.MapFragment.getView(MapFragment.java:32)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at in.wptrafficanalyzer.actionbarsherlocknavtab.MapFragment.getView(MapFragment.java:1)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.support.v4.app.FragmentPagerAdapter.isViewFromObject(FragmentPagerAdapter.java:147)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.support.v4.view.ViewPager.infoForChild(ViewPager.java:1258)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1031)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.View.measure(View.java:12775)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.View.measure(View.java:12775)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4709)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.View.measure(View.java:12775)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.View.measure(View.java:12775)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4709)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2240)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.View.measure(View.java:12775)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1117)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.os.Looper.loop(Looper.java:137)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at android.app.ActivityThread.main(ActivityThread.java:4514)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at java.lang.reflect.Method.invokeNative(Native Method)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at java.lang.reflect.Method.invoke(Method.java:511)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-03 18:48:49.210: E/AndroidRuntime(2779):     at dalvik.system.NativeStart.main(Native Method)

Code:

MapFragment :

package in.wptrafficanalyzer.actionbarsherlocknavtab;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import com.jakewharton.android.mapsforge_fragment.GeoPoint;
import com.jakewharton.android.mapsforge_fragment.MapView;
import com.jakewharton.android.mapsforge_fragment.MapViewMode;

public class MapFragment extends Fragment {
    private static final String KEY_LATITUDE_E6 = "MapFragment:LatitudeE6";
    private static final String KEY_LONGITUDE_E6 = "MapFragment:LongitudeE6";
    private static final String KEY_ZOOM_LEVEL = "MapFragment:ZoomLevel";
    private static final String KEY_MAP_FILE = Environment.getExternalStorageDirectory()+ "/great_britain.map";

    private final MapViewMode mMapViewMode;


    public MapFragment() {
        this(MapView.DEFAULT_MAP_VIEW_MODE);
    }

    public MapFragment(MapViewMode mapViewMode) {
        mMapViewMode = mapViewMode;
    }


    @Override
    public MapView getView() {
        return (MapView)super.getView();
    }

    @Override
    public MapView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MapView mapView = new MapView(getActivity(), mMapViewMode);
        if (savedInstanceState != null) 
        {
            final int latitude = savedInstanceState.getInt(KEY_LATITUDE_E6, Integer.MIN_VALUE);
            final int longitude = savedInstanceState.getInt(KEY_LONGITUDE_E6, Integer.MIN_VALUE);
            final byte zoom = savedInstanceState.getByte(KEY_ZOOM_LEVEL, Byte.MIN_VALUE);
            final String mapFile = savedInstanceState.getString(KEY_MAP_FILE);

            if ((mapFile != null) && !mapView.getMapViewMode().requiresInternetConnection()) {
                mapView.setMapFileFromParcel(mapFile);
            }

            if ((latitude != Integer.MIN_VALUE) && (longitude != Integer.MIN_VALUE) && (zoom != Byte.MIN_VALUE)) {
                mapView.setCenterAndZoom(new GeoPoint(latitude, longitude), zoom);
            }
        }

        return mapView;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        MapView mapView = getView();
        if (mapView != null) {
            mapView.destroy();
            mapView = null;
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        MapView mapView = getView();
        if (mapView.hasValidCenter()) {
            if (!mapView.getMapViewMode().requiresInternetConnection() && (mapView.getMapFile() != null)) {
                outState.putString(KEY_MAP_FILE, mapView.getMapFile());
            }

            GeoPoint center = mapView.getMapCenter();
            outState.putInt(KEY_LATITUDE_E6, center.getLatitudeE6());
            outState.putInt(KEY_LONGITUDE_E6, center.getLongitudeE6());
            outState.putByte(KEY_ZOOM_LEVEL, mapView.getZoomLevel());
        }
    }

}

Update ::

package in.wptrafficanalyzer.actionbarsherlocknavtab;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import com.jakewharton.android.mapsforge_fragment.GeoPoint;
import com.jakewharton.android.mapsforge_fragment.MapView;
import com.jakewharton.android.mapsforge_fragment.MapViewMode;

public class MapFragment extends Fragment {
    private static final String KEY_LATITUDE_E6 = "MapFragment:LatitudeE6";
    private static final String KEY_LONGITUDE_E6 = "MapFragment:LongitudeE6";
    private static final String KEY_ZOOM_LEVEL = "MapFragment:ZoomLevel";
    private static final String KEY_MAP_FILE = Environment.getExternalStorageDirectory()+ "/great_britain.map";

    private final MapViewMode mMapViewMode;


    public MapFragment() {
        this(MapView.DEFAULT_MAP_VIEW_MODE);
    }

    public MapFragment(MapViewMode mapViewMode) {
        mMapViewMode = mapViewMode;
    }

    @Override
    public MapView getView() {
        NoSaveStateFrameLayout wrapper = (NoSaveStateFrameLayout)super.getView();
        return (MapView)((wrapper != null) ? wrapper.getChildAt(0) : null);
    }

    @Override
    public MapView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MapView mapView = new MapView(getActivity(), mMapViewMode);
        if (savedInstanceState != null) {
            final int latitude = savedInstanceState.getInt(KEY_LATITUDE_E6, Integer.MIN_VALUE);
            final int longitude = savedInstanceState.getInt(KEY_LONGITUDE_E6, Integer.MIN_VALUE);
            final byte zoom = savedInstanceState.getByte(KEY_ZOOM_LEVEL, Byte.MIN_VALUE);
            final String mapFile = savedInstanceState.getString(KEY_MAP_FILE);

            if ((mapFile != null) && !mapView.getMapViewMode().requiresInternetConnection()) {
                mapView.setMapFileFromParcel(mapFile);
            }

            if ((latitude != Integer.MIN_VALUE) && (longitude != Integer.MIN_VALUE) && (zoom != Byte.MIN_VALUE)) {
                mapView.setCenterAndZoom(new GeoPoint(latitude, longitude), zoom);
            }
        }

        return mapView;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        MapView mapView = getView();
        if (mapView != null) {
            mapView.destroy();
            mapView = null;
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        MapView mapView = getView();
        if (mapView.hasValidCenter()) {
            if (!mapView.getMapViewMode().requiresInternetConnection() && (mapView.getMapFile() != null)) {
                outState.putString(KEY_MAP_FILE, mapView.getMapFile());
            }

            GeoPoint center = mapView.getMapCenter();
            outState.putInt(KEY_LATITUDE_E6, center.getLatitudeE6());
            outState.putInt(KEY_LONGITUDE_E6, center.getLongitudeE6());
            outState.putByte(KEY_ZOOM_LEVEL, mapView.getZoomLevel());
        }
    }
}

解决方案

Based on the link you provided, is there a reason you went away from their getView() method?

@Override
public MapView getView() {
    NoSaveStateFrameLayout wrapper = (NoSaveStateFrameLayout)super.getView();
    return (MapView)((wrapper != null) ? wrapper.getChildAt(0) : null);
}

这篇关于问题与NoSaveStateFramelayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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