Programmatically set google map fragment visibility (API2)

后端 未结 5 851
囚心锁ツ
囚心锁ツ 2020-12-01 18:20

xml:



        
相关标签:
5条回答
  • 2020-12-01 18:29

    Both the answer By @David and @ferdy182 are right but they don't told the context.

    if you hide/show fragment Programmatically then use @ferdy182 and if you want to hide/show fragment which is in xml. you should follow @David

    Let me explain

    If you are having a single frameLayout in xml and you want to replace the other fragment in that particular one after another. use this code to add all fragment . they will be place on one another.

    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 
    

    hide all other fragment except which you want to show.

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

    Benefit These fragment work like form in c#. Forum.show and forum.hide(); . Where there current state remain their. these fragment don't call again and again. A problem here i solve it using this technique. 2nd Method

    when you are having multiple frameLayout or fragment in xml . you can hide that particular by getting its id.

    private GoogleMap mMap;
    private SupportMapFragment mMapFragment;
    
    mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
    mMap = mMapFragment.getMap();
    
    mMapFragment.getView().setVisibility(View.INVISIBLE);
    

    Codes

    // to show fragment when it is hidden

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

    // to hide fragment

    FragmentManager fm = getSupportFragmentManager();
    fm.beginTransaction()
              .hide(fragment1)
              .commit();
    
    0 讨论(0)
  • 2020-12-01 18:29

    Instead of creating a SupportMapFragment in xml, there could be another approach in which we can define container for SupportMapFragment in xml and then load map from class.

    In XML, let say container is FrameLayout-

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

    In my java class which is a Fragment, I have created two methods to show and hide map. I used detach and it depends on need. We can also use hide instead of 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();
            }
        }
    
    0 讨论(0)
  • 2020-12-01 18:31

    Simple as this:

    private GoogleMap mMap;
    private SupportMapFragment mMapFragment;
    
    mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment));
    mMap = mMapFragment.getMap();
    
    mMapFragment.getView().setVisibility(View.INVISIBLE);
    
    0 讨论(0)
  • 2020-12-01 18:34

    Only that works for me :

    View fragmentMap = layout.findViewById(R.id.map_fragment_container_id);
    fragmentMap.setVisibility(View.GONE);
    
    0 讨论(0)
  • 2020-12-01 18:36

    You can do:

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

    to show it:

    getSupportFragmentManager().beginTransaction().show(mFragment).commit();
    
    0 讨论(0)
提交回复
热议问题