2016-04-01 14 views
0

このトピックでいくつか質問がありますが、私のケースには該当しません。私はgoogleMapを使用するアプリケーションを構築していますが、私の問題は、フラグメントが2回作成されていることです。これは、アプリケーションを遅くしたり、重複させるなどの問題を引き起こしています。これは、プログラムの仕組みです。メインアクティビティにはコンテナがあり、最初はログインフラグメントを保持しています。ログインが成功すると、メインアクティビティはログインフラグメントをデタッチし、マップフラグメントを追加します。フラグメントが2回作成される

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

と、これは私のxmlです:

<?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> 

あなたはそれが起こっている理由を私は理解を助けることができますので、私はそれを修正することができますか?前もって感謝します。

+0

に行きますpportMapフラグメントとそれのレイアウトの中に別のMapFragmentを配置します。これはあなたの問題かもしれません。 –

答えて

0

あなたはMapFragmentを拡張する必要がありますあなたのフラグメントを断片化し、元のマップ上の余分な作業を追加したい場合は、そのコールバックしたい場合:

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{ 

して、その後、これを解決するには、XMLレイアウトでクラスタグを変更onCreateViewにセクションを膨らま削除しますクラス:

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"/> 

は、マップのインスタンスにアクセスするには、フラグメントのクラスでgetMap()メソッドを使用し、それは蘇だ

関連する問題