Карты Google в ошибке onDestroy вьюпейджера

Здравствуйте, у меня проблема с фрагментом OnDestroy при интеграции карт Google во фрагмент пейджера просмотра. проблема возникает всякий раз, когда фрагмент карты уничтожается, и я пытаюсь уничтожить фрагмент контейнера. По крайней мере, я так считаю.

Поэтому всякий раз, когда есть причина уничтожить основное действие, приложение получает прикрепленную ошибку. (выйти из системы, нажать кнопку «Назад» и т. д.).

Логкат

01-29 14:30:14.101: E/dalvikvm(21900): adjustAdaptiveCoef max=4194304, min=1048576, ut=568
01-29 14:30:19.968: W/dalvikvm(21900): threadid=1: thread exiting with uncaught exception (group=0x41cc3930)
01-29 14:30:19.984: E/AndroidRuntime(21900): FATAL EXCEPTION: main
01-29 14:30:19.984: E/AndroidRuntime(21900): java.lang.RuntimeException: Unable to destroy activity {com.user/com.user.DashboardActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3538)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3556)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread.access$1300(ActivityThread.java:150)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1333)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.os.Looper.loop(Looper.java:175)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread.main(ActivityThread.java:5279)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at java.lang.reflect.Method.invokeNative(Native Method)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at java.lang.reflect.Method.invoke(Method.java:511)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at dalvik.system.NativeStart.main(Native Method)
01-29 14:30:19.984: E/AndroidRuntime(21900): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at com.user.Fragment_Map.onDestroyView(Fragment_Map.java:193)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1705)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:996)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1921)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:335)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.Activity.performDestroy(Activity.java:5452)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1127)
01-29 14:30:19.984: E/AndroidRuntime(21900):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3525)
01-29 14:30:19.984: E/AndroidRuntime(21900):    ... 11 more
01-29 14:30:30.210: I/Process(21900): Sending signal. PID: 21900 SIG: 9

Фрагмент карты , метод OnDestroy, который я использовал на основе других предложений stackoverflow, помогает при изменении вкладок, однако выдает ошибку.

package com.user;



// MAP POINTS AND BUS_POINTS ARE STILL UNTESTED

public class Fragment_Map extends Fragment implements LocationListener {
    // ...

    private GoogleMap map;
    SqlHandler sqlHandler;
    private BroadcastReceiver mMessageReceiver;
    private LatLng myLocation;

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



        View v = inflater.inflate(R.layout.fragment_map, null, false);
        sqlHandler = new SqlHandler(getActivity());
        initilizeMap();

        return v;

    }

    private void initilizeMap() {
        if (map == null) {

            map = ((SupportMapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();

            // check if map is created successfully or not
            if (map == null) {
                Toast.makeText(getActivity().getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();

            }
        }
    }


    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    public void onDestroyView() {
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);
        super.onDestroyView();
        Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
    }

}

person user2652614    schedule 29.01.2014    source источник


Ответы (1)


вы должны поставить свой супер звонок после удаления фрагмента

public void onDestroyView() {
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);        
    Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.remove(fragment);
    ft.commit();
    super.onDestroyView();
}
person amin0no    schedule 08.09.2014