Подтвердить что ты не робот

Программно установить видимость фрагмента карты Google (API2)

XML:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mapFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"/>

В регулярном фрагменте это выглядит следующим образом:

  mFragment = (mFragment) (getSupportFragmentManager().findFragmentById(R.id.mFragment));
  mFragment.getView().setVisibility(View.INVISIBLE);

В фрагменте карты Google:

  mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();

Но как я могу обновить видимость фрагмента карты?

Невозможно сделать это, как другие фрагменты.

4b9b3361

Ответ 1

Просто, как это:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();

mMapFragment.getView().setVisibility(View.INVISIBLE);

Ответ 2

Вы можете сделать:

getSupportFragmentManager().beginTransaction().hide(mFragment).commit();

чтобы показать это:

getSupportFragmentManager().beginTransaction().show(mFragment).commit();

Ответ 3

Оба ответа @David и @ferdy182 верны, но они не сообщают контексту.

если вы скрываете/показываете фрагмент программно, затем используйте @ferdy182, и если вы хотите скрыть/показать фрагмент, который находится в xml. вы должны следовать @David

Позвольте мне объяснить

Если у вас есть один frameLayout в xml и вы хотите заменить другой фрагмент в том, что один за другим. используйте этот код, чтобы добавить весь фрагмент. они будут находиться друг на друге.

for(int i=0;i<4;i++)
        {
            getFragmentManager().beginTransaction().add(R.id.container, frag[i])
            //.addToBackStack(null)
            .commit();
        }// add all these fragment and put them on each other then 

скрыть все остальные фрагменты, за исключением которых вы хотите показать.

for(int j=0;j<4;j++)
        {
        getFragmentManager().beginTransaction().hide(frag[j]).commit();
        }
        getFragmentManager().beginTransaction().show(frag[0]).commit();

ВыгодаЭти фрагменты работают как форма в С#. Forum.show и forum.hide();, Там, где текущее состояние остается их. эти фрагменты не звонят снова и снова. A проблема здесь Я решаю ее с помощью этой техники. Второй метод

когда у вас есть несколько frameLayout или фрагмент в xml. вы можете скрыть это, получив свой идентификатор.

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
mMap = mMapFragment.getMap();

mMapFragment.getView().setVisibility(View.INVISIBLE);

Коды

//показать фрагмент, когда он скрыт

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .show(fragment1)
          .commit();

//скрыть фрагмент

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .hide(fragment1)
          .commit();

Ответ 4

Только для меня это работает:

View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
fragmentMap.setVisibility(View.GONE);

Ответ 5

Вместо создания в xml может быть другой подход, в котором мы можем определить контейнер для SupportMapFragment в xml, а затем загрузить карту из класса.

В XML, скажем, контейнер FrameLayout -

    <FrameLayout
        android:id="@+id/mapContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

В моем классе java, который является Fragment, я создал два метода для отображения и скрытия карты. Я использовал отрыв, и это зависит от необходимости. Мы также можем использовать hide вместо отсоединения.

   private void showMap() {
   mMapContainer.setVisibility(View.VISIBLE);
   mSupportMapFragment = SupportMapFragment.newInstance();
   getChildFragmentManager().beginTransaction()
                         .replace(R.id.mapContainer, mSupportMapFragment).commit();
   }

    private void hideMap() {
        mMapContainer.setVisibility(View.VISIBLE);
        if (mSupportMapFragment != null) {
            getChildFragmentManager().beginTransaction()
                                 .detach(mSupportMapFragment).commit();
        }
    }