2013-07-04 29 views
13

Tôi đang cố gắng sử dụng bản đồ google v2 trong viewpager (fragmentpager) trong một đoạn. Nó hoạt động tốt nếu tôi swipe để mảnh thứ tư (xem máy nhắn tin), nhưng nếu tôi quay trở lại mảnh đầu tiên và sau đó trở lại thứ tư - với bản đồ - ứng dụng của tôi chết.Android, bản đồ google fragment và viewpager - Lỗi lạm phát phân đoạn lớp

07-04 19:38:20.937: E/AndroidRuntime(20175): FATAL EXCEPTION: main 
07-04 19:38:20.937: E/AndroidRuntime(20175): android.view.InflateException: Binary XML  
file line #13: Error inflating class fragment 
... 
07-04 19:38:20.937: E/AndroidRuntime(20175): Caused by:  
java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f050010, 
tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 

07-04 19:38:20.937: E/AndroidRuntime(20175): at  android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285) 
07-04 19:38:20.937: E/AndroidRuntime(20175): at  android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 

Android Java:

public class LocationDetail extends Fragment { 

private SupportMapFragment mMapFragment; 
private GoogleMap map; 
private EventAdapter listAdapter ; 

protected MainActivity activity; 

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

    View vw = inflater.inflate(R.layout.map, container, false); 

    try { 
     MapsInitializer.initialize(getActivity()); 
    } catch (GooglePlayServicesNotAvailableException e) { 
     // TODO handle this situation 
    } 

    map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map_container)).getMap(); 
    map.setMyLocationEnabled(true); 


    map.addMarker(new MarkerOptions() 
    .position(new LatLng(48.397141, 9.98787)).title(" Theatro Club Ulm")); 

    map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(48.397141, 9.98787) , 14.0f)); 

    return vw; 
} 

} 

Layout:

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

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1.0" 
android:orientation="vertical" > 

<fragment 

    android:id="@+id/map_container" 
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.dr.diskoapp.MainActivity" 
    /> 
</LinearLayout> 

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1.0" 
android:orientation="vertical" > 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/list">   
</ListView> 
</LinearLayout> 
</LinearLayout> 

Tôi đã nhìn thấy rằng có rất nhiều chủ đề với một vấn đề tương tự, nhưng không có giải pháp: -/

perhapse ai cũng có thể giúp lần này.

---------- EDIT ----- Tôi tìm thấy giải pháp :-)

public void onDestroyView() { 
    super.onDestroyView(); 

    try { 
     Fragment fragment = (getFragmentManager().findFragmentById(R.id.map_container)); 
     FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
     ft.remove(fragment); 
     ft.commit(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Đồng ý đặt câu trả lời này (có, trả lời câu hỏi của riêng bạn) để người khác có thể thấy rằng sự cố đã được giải quyết! – DaGardner

+1

bạn nói đúng, theo cách đó đã thử tôi trước, nhưng tôi không có đủ danh tiếng để làm điều đó :-( – Dominik00000

+0

Lạ lẫm, làm việc tuyệt vời cho tôi và vấn đề của tôi xảy ra với hai trang - một trang chứa bản đồ và Bất cứ ai có thể giải thích những gì đang xảy ra ở đây để làm cho nó sụp đổ? –

Trả lời

11
public void onDestroyView() { 
super.onDestroyView(); 

try { 
    Fragment fragment = (getFragmentManager().findFragmentById(R.id.map_container)); 
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
    ft.remove(fragment); 
    ft.commit(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

+0

Điều này đã khắc phục được sự cố của tôi. –

1

này đã làm việc cho tôi.

@Override 
public void onDestroyView() { 
    // TODO Auto-generated method stub 
    super.onDestroyView(); 
    try 
    { 
     FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 
     ft.remove(mapFragment); 
     ft.commitAllowingStateLoss(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Các vấn đề liên quan