【问题标题】:Programmatically set google map fragment visibility (API2)以编程方式设置谷歌地图片段可见性(API2)
【发布时间】:2012-11-29 19:12:04
【问题描述】:

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);

在谷歌地图片段中:

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

但是我怎样才能逐步设置地图片段的可见性?

不能像其他片段那样做。

【问题讨论】:

  • 您可以尝试将mMap 转换为Fragment 并执行相同的getView().setVisibility(View.INVISIBLE),因为SupportMapFragment 仍然是一个片段。
  • 无法从 GoogleMap 投射到 Fragment
  • 您是否尝试使用getSupportFragmentManager().beginTransacton().hide(mMap).commit()getSupportFragmentManager().beginTransacton().detach(mMap).commit()
  • 试过了。但是没有用。只要 map 声明如下:private GoogleMap mMap; 我得到:“FragmentTransaction 类型中的方法 hide/detach(Fragment) 不适用于参数 (GoogleMap)”
  • 对不起,我的错误,试试这个:getSupportFragmentManager().beginTransacton().hide(getSupportFragmentManager().findFragmentById(R.id.mapFragment)).commit()getSupportFragmentManager().findFragmentById(R.id.mapFragment).getView().setVisibility(View.INVISIBLE);

标签: android google-maps android-fragments visibility


【解决方案1】:

就这么简单:

private GoogleMap mMap;
private SupportMapFragment mMapFragment;

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

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

【讨论】:

  • 这帮助我弄清楚了如何以编程方式更改支持地图片段的高度。谢谢! stackoverflow.com/questions/21469345/…
  • 如果地图在滚动视图中,当我隐藏滚动视图时,地图不会隐藏。如果我在 Scrollview 之前隐藏地图,它仍然不会隐藏。我不得不隐藏地图,等待 1 毫秒,然后使用 Timer 隐藏滚动视图。
【解决方案2】:

你可以这样做:

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

展示它:

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

【讨论】:

    【解决方案3】:

    @David@ferdy182 的答案都是正确的,但他们没有说明上下文。

    如果您以编程方式隐藏/显示片段,则使用@ferdy182 并且如果您想隐藏/显示 xml 中的片段。你应该关注@David

    让我解释一下

    如果您在 xml 中有一个 frameLayout,并且您想一个接一个地替换该特定片段中的另一个片段。使用此代码添加所有片段。它们将相互叠放。

    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();
    

    好处 这些片段的工作方式类似于 c# 中的表单。 Forum.show 和 forum.hide(); .当前状态仍然存在的地方。这些片段不会一次又一次地调用。 problem here 我使用这种技术解决了它。 第二种方法

    当您在 xml 中有多个 frameLayout 或片段时。你可以通过获取它的 id 来隐藏它。

    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();
    

    【讨论】:

    • 你不应该通过改变它的可见性来隐藏它。隐藏和显示也可以使用 xml 中定义的片段,您只需执行 findFragmentById 即可将片段实例传递给片段事务
    【解决方案4】:

    只对我有用:

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

    【讨论】:

      【解决方案5】:

      除了在 xml 中创建 SupportMapFragment 之外,还有另一种方法,我们可以在 xml 中为 SupportMapFragment 定义容器,然后从类中加载映射。

      在 XML 中,假设容器是 FrameLayout-

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

      Fragment 的 java 类中,我创建了两种方法来显示和隐藏地图。我使用了分离,这取决于需要。我们也可以用 hide 代替 detach。

         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();
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-31
        • 2016-06-11
        • 2016-03-25
        相关资源
        最近更新 更多