2016-11-29 3 views
0

Ich mache eine App und ich benutze nur einzelne Aktivität und mehr Fragment und wenn ich ein Fragment zu einem anderen Fragment gehe, das Liste und jedes Element mit Mapbutton, wenn ich es zum ersten Mal dann klicke Es öffnet Karte, aber wenn wir wieder auf Karte Knopf klicken, gibt es gsm Fragment inflation Fehler. Ich weiß nicht, warum es diesen Fehler gibt, während es zum ersten Mal Karte nach dem Schließen der Karte wieder öffnet, öffnen wir Fehler.Karte in Fragmentliste

imageButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialog = new Dialog(getActivity()); 
        dialog.setContentView(R.layout.dialog_map); 
        dialog.setTitle("Map"); 

        dialog.show(); 
        Button closeButton = (Button) dialog.findViewById(R.id.mr_close); 
        final LinearLayout frg=(LinearLayout)dialog.findViewById(R.id.frg); 
        closeButton.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          frg.removeAllViews(); 
          dialog.dismiss(); 
         } 
        }); 
       } 
      }); 


<LinearLayout android:id="@+id/frg" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 
    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".8"/> 

    <Button android:id="@+id/mr_close" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 

      android:layout_weight=".2" 
      android:text="close"/> 
</LinearLayout> 
+0

bitte vollständigen Code für das Verständnis hinzufügen –

+0

Sie die geografische Breite und Länge von passieren sollte, was Sie mit dem Fragment auf der Karte angezeigt werden sollen, die Argumente verwenden und sie dann auf der Karte zeigen –

Antwort

0

Das ist aufgrund Fragment duplizieren, entfernen Sie sie auf closebutton klicken

try { 
     android.app.Fragment fragment = getFragmentManager().findFragmentById(R.id.map); 
     if (fragment != null) { 
      android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.remove(fragment); 
      ft.commit(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
0

Sie haben Karte entfernen aus aufgeblasenen Listenelement, wenn Ihr ListFragment entfernt hat. Sie können auch überprüfen, ob Ihre Karte zuvor in onCreate von Ihrem ListFragment aufgeblasen ist und Karte vor dem Aufblasen entfernen ListFragment Layout.

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    SupportMapFragment supportMapFragment = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map)); 
    if (supportMapFragment != null) 
     getActivity().getSupportFragmentManager().beginTransaction().remove(supportMapFragment).commit(); 
} 

Entfernen Sie die Karte, während Sie das Fragment zerstören. Wie,

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    SupportMapFragment supportMapFragment = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map)); 
    if (supportMapFragment != null && getActivity() != null) { 
     try { 
      getActivity().getSupportFragmentManager().beginTransaction().remove(supportMapFragment).commitAllowingStateLoss(); 
     } catch (Exception e) { 

     } 
    }