2016-04-01 41 views
0

Aynı konuyla ilgili bazı soruların olduğunu biliyorum, ancak bunların hiçbiri benim durumum için geçerli değil. GoogleMap kullanan bir uygulama yapıyorum, ancak sorun, parçanın iki kez oluşturulduğudur. Bu, uygulamayı yavaşlatmak ve birbiriyle çakışmak gibi sorunlara neden oluyor. Programın işleyiş şekli şu şekildedir: Ana faaliyetin, başlangıçta bir giriş parçasını tutan bir konteyneri vardır. Giriş başarılı olursa, ana etkinlik giriş parçasını çıkarır ve harita parçasını ekler.Fragman iki kez oluşturuldu

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 


<fragment 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:tag="@string/google_map" 
    android:id="@+id/google_map" 
    android:layout_weight="5"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:clickable="true" 
     android:baselineAligned="false" 
     android:id="@+id/map_event"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:id="@+id/icon_event_divisor"> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:paddingTop="10dp" 
       android:paddingBottom="10dp" 
       android:paddingStart="5dp" 
       android:paddingEnd="5dp" 
       android:clickable="false" 
       android:layout_gravity="center" 
       android:id="@+id/event_icon"/> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_gravity="center" 
      > 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/person_full_name" 
        android:textSize="10dp" 
        android:id="@id/person_full_name"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="8dp" 
        android:text="@string/event_description" 
        android:layout_below="@id/person_full_name" 
        android:id="@+id/event_description"/> 

      </RelativeLayout> 

     </LinearLayout> 


    </LinearLayout> 

bunu oluyor bana neden anlamaya yardımcı olabilir, bu yüzden bunu düzeltebilirsiniz:

public class MapFragment extends SupportMapFragment { 

private GoogleMap mMap; 
private Event mEventSelected; 
private Person mPersonSelected; 
private Map<Marker, Event> mMapMarkers; 
private List<Polyline> mLines; 
private TextView mPersonFullName; 
private TextView mEventDescription; 
private LinearLayout mMapEvent; 
private ImageView mEventIcon; 
private String mEventId; 


@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
    mMapMarkers = new HashMap<>(); 
    mLines = new ArrayList<>(); 
    mEventSelected = null; 
    mPersonSelected = null; 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

    super.onCreateView(inflater, container, savedInstanceState); 
    View v = inflater.inflate(R.layout.fragment_map, container, false); 
    v = drawDefaultLayout(v); 
    if (mMap == null) 
    { 
     initializeMap(); 
    } 

    return v; 
} 

private void initializeMap() { 

    mMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.google_map)).getMap(); 
    if (getArguments() != null && getArguments().containsKey(FamilyMapData.getInstance().EVENT)) 
    { 
     mEventId = getArguments().getString(FamilyMapData.getInstance().EVENT); 
     drawCenteredMap(); 
    } 
    pinEvents(); 
    markerHandler(); 
} 

private void drawCenteredMap() { 
    mEventSelected = FamilyMapData.getEvents().get(mEventId); 
    setCurrentEvent(); 
    CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(mEventSelected.getLatitude(), mEventSelected.getLongitude())); 
    mMap.moveCamera(center); 
    drawLines(); 
} 

private void pinEvents() { 
    mMap.clear(); 
    Map <String, Event> events = FamilyMapData.getEvents(); 

    for (Event event : events.values()) 
    { 
     LatLng coordinates = new LatLng(event.getLatitude(), event.getLongitude()); 
     String description = event.getDescription(); 
     if (Filter.sFilterMap.containsKey(description) && Filter.sFilterMap.get(description)) { 

      float color = getColor(description); 
      mMapMarkers.put(mMap.addMarker(new MarkerOptions().position(coordinates).icon(BitmapDescriptorFactory.defaultMarker(color))), event); 
     } 
    } 
} 

ve bu benim xml nedir? Şimdiden teşekkür ederim.

+0

gitmek pportMap parçası ve onun düzeninin içine başka bir MapFragment koyun. Bu senin problemin olabilir. –

cevap

0

Eğer MapFragment uzatmak olması gerekir fragman parçalayıp orijinal harita üzerinde fazladan iş ekleyerek istiyorsanız onun geri aramalar istiyorsanız:

import com.google.android.gms.maps.MapFragment; 
public class MapFrag extends MapFragment implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener, 
    GoogleMap.OnInfoWindowClickListener, 
    GoogleMap.OnMapLongClickListener, 
    GoogleMap.OnMapClickListener, 
    GoogleMap.OnMarkerClickListener{ 

ve daha sonra bu adrese xml düzeninde sınıf etiketini değiştirmek onCreateView bölümüne şişirmek kaldırmak sınıfı:

fragment 
android:layout_width="wrap_content" 
android:layout_height="0dp" 
class="yourPackage.MapFrag" 
android:tag="@string/google_map" 
android:id="@+id/google_map" 
android:layout_weight="5"/> 

sonra harita örneği erişmek için parça sınıfında getMap() yöntemi kullanmak ve bir Su var