2012-12-27 188 views
5

我有一個片段活動,可在按鈕單擊時切換片段。
我切換兩個片段:從映射片段切換到另一個片段並返回

  1. 谷歌地圖Android版V2片段
  2. 用文本視圖

另一個片段我這是怎麼切換片段:

public void onClick(View v) { 
    FragmentManager fm = getSupportFragmentManager(); 
    if(tv.getText().toString().equalsIgnoreCase("Click ME!!")){ 
     tv.setText("MAP"); 
     if (fm != null) { 
      if(map == null){  
       map = new Map(); 
      } 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.replace(R.id.lay_contaier, map); 
      ft.commit(); 

     } 
    } 
    else{ 
     tv.setText("Click ME!!"); 
     if (fm != null){ 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.replace(R.id.lay_contaier,new empty()); 
      ft.commit(); 

     } 
    } 
} 

這是我的地圖Fagment代碼

public class Map extends Fragment implements OnMarkerClickListener, OnInfoWindowClickListener, OnMarkerDragListener { 

private static final LatLng PERTH = new LatLng(-31.952854, 115.857342); 
private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); 


    private GoogleMap mMap; 

private Marker mPerth; 
    private Marker mSydney; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_main,null); 

     return view; 
    } 

activity_mail.xml

<?xml version="1.0" encoding="utf-8"?> 


<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
class="com.google.android.gms.maps.SupportMapFragment"/> 

但每次我SWICH回到地圖的時間片段的應用程序崩潰。我應該如何讓這段代碼正確?

回答

0

您正在使FragmentManager爲空。刪除fm=null。同樣在else循環中,你正在替換兩個片段。不要一次做兩次替換。在調用commit()之前,你只做一次替換

+0

他們替換相同的佈局R.id.lay_contaier –

+0

@nagaraj - 我編輯了帖子,但它仍然是相同的應用程序仍然崩潰 – zoram

+0

你粘貼的代碼,沒有錯。你必須告訴我其他代碼才能找到錯誤的 – TNR

6

我懷疑這發生在你身上,因爲你已經在你的XML佈局文件中定義了你的地圖片段。爲了交換片段以這種方式,您將需要實例化的符號映射,類似如下:

private void initializeMap() { 

    mMapFragment = SupportMapFragment.newInstance(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.fragment_container, mMapFragment, "map"); 
    fragmentTransaction.commit(); 

    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      mMap = mMapFragment.getMap(); 

      mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
       @Override 
       public void onCameraChange(CameraPosition cameraPosition) { 
        // Do something here 
       } 
      }); 
     } 
    }); 
} 

我發現mMapFragment.getMap()被返回null,所以這就是爲什麼你需要安排休息的設置通過Handler實例。我的佈局XML如下所示:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".LauncherActivity"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/fragment_container"> 

    <!-- The fragments will go here --> 
</RelativeLayout> 

<RelativeLayout 
    android:layout_gravity="start" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:background="@color/drawer_background"> 
... 
</RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

我希望這有助於。

+1

由於Google Play Services 6.5及更高版本通過使用'mMapFragment.getMapAsync()'方法在地圖初始化時被告知,所以現在已經過時了。 – Thorinside

相關問題