Мерцание черного экрана Google Maps V2 при добавлении или удалении

#android #google-maps #android-fragments #google-maps-android-api-2

#Android #google-карты #android-фрагменты #google-maps-android-api-2

Вопрос:

У меня есть действие с 3 фрагментами, которые переключаются с помощью вкладок .. у одного из этих фрагментов есть карта.. я пробовал использовать SupportMapFragment и просто com.google.android.gms.maps.MapView во фрагменте

но когда я добавляю или заменяю фрагмент, содержащий карту.. я получаю мерцание черного экрана.. чего никогда не происходит с другими фрагментами

Я посмотрел и попытался сделать фон карты прозрачным, но это не принесло мне никакой пользы

У любого органа есть решение для этого?

Комментарии:

1. как сделать прозрачный фон для карты?

2. вы должны подождать некоторое время для загрузки карты, попробуйте добавить new Handler().postDelayed , когда пытаетесь заменить / добавить Map Fragment

3. @Anuj мог бы немного рассказать об этом? Как именно это сделать?

4. @NullPointerException , я упомянул в сообщении, что это не сработало 🙂

5. @elmorabea как вы решили эту проблему

Ответ №1:

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

  new Handler().post(new Runnable()
            {
                public void run()
                {
                    mSupportMapFragment = new SupportMapFragment();
                    mFragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
                    mFragmentTransaction.replace(mMapWrapperLayoutStoreMap.getId(), mSupportMapFragment);
                    mFragmentTransaction.addToBackStack(BK_STK_SUPPORT_MAP_FRAGMENT);
                    mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();
                }
            });
 

Также используйте setTransition как открытый и дайте мне знать, если это работает.

Комментарии:

1. На самом деле я бы посоветовал вам добавить SupportMapFragment из java вместо того, чтобы добавлять его непосредственно в файл макета XML, он будет работать.

2. Помогает вам выделить время и время для загрузки фрагмента по вашему желанию

3. Это помогло при добавлении фрагмента, но все та же проблема при удалении фрагмента

4. вы использовали getSupportFragmentManager().popBackStackImmediate(BK_STK_SUPPORT_MAP_FRAGMENT, FragmentManager.POP_BACK_STACK_INCLUSIVE); для всплывания своего фрагмента?

5. к сожалению, проблема по-прежнему сохраняется, даже начало мигать снова, я изменил его на отдельное действие

Ответ №2:

После загрузки карты, т.Е. Вы узнаете onActivityCreated() о фрагменте карты. Вы должны вызвать следующий метод

 private void setMapTransparent(ViewGroup group) {
    int childCount = group.getChildCount();
    for (int i = 0; i < childCount; i  ) {
        View child = group.getChildAt(i);
        if (child instanceof ViewGroup) {
            setMapTransparent((ViewGroup) child);
        } else {
             child.setBackgroundColor(0x00000000);
        }
    }
}
 

как

 setMapTransparent((ViewGroup) fragment.getView());
 

где ваш fragment фрагмент карты. Надеюсь, это поможет