Программно установить видимость фрагмента карты 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();
Но как я могу обновить видимость фрагмента карты?
Невозможно сделать это, как другие фрагменты.
Ответы
Ответ 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();
}
}