2017-03-27 4 views
-1

J'ai un supportMapFragment initié à l'intérieur d'un fragment.Les fragments doivent être statiques de telle sorte qu'ils puissent être ré-instanciés par le système, et les classes anonymes ne sont pas statiques

Voici comment je l'ai créé.

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState){ 
super.onViewCreated(view, savedInstanceState); 

    mapFragment = new SupportMapFragment() 
    { 
     @Override 
     public void onActivity(Bundle bundle) 
     { 
      super.onActivity(bundle); 
      mapFragment.getMapAsync(HomeFragment.this); 
     } 

    }; 
    getChildFragmentManager().beginTransaction().replace(R.layout.container, mapFragment).commit(); 
} 

Mon problème est que chaque fois que je crée une construction, la création échoue en disant que « Des fragments doivent être statiques tels qu'ils peuvent être réutilisés instanciées par le système, et les classes anonymes ne sont pas statiques »

J'ai essayé de placer la variable à statique mais il obtient toujours l'erreur.

Aidez-nous s'il vous plaît.

+0

Le _class_ doit être statique. Quand vous faites 'new SupportMapFragment() {...}', c'est une classe anonyme, qui n'est pas statique. –

+0

Comment dois-je faire? Je veux dire, il y a une raison pour laquelle j'ai instancié le fragment dans la classe, donc je ne peux pas utiliser la méthode findFragmentById de l'utilisateur. – MetaSnarf

+1

Vous n'avez pas à l'inclure dans votre mise en page dans un élément '', et 'findFragmentById()' dans cet élément. Vous avez juste besoin de créer une sous-classe concrète et de créer une instance de celle-ci avant de la traiter. –

Répondre

1
static class MySupportMapFragment extends SupportMapFragment{ 
    XXX mMapFragment; 
    MySupportMapFragment(XXX mapFragment){ 
     super(); 
     mMapFragment = mapFragment; 
    } 
    @Override 
    public void onActivity(Bundle bundle) 
    { 
     super.onActivity(bundle); 
     mMapFragment.getMapAsync(HomeFragment.this); 
    } 

}; 
-1

Ajouter cette application dans gradle

lintOptions { 
    checkReleaseBuilds false 
    abortOnError false 
}