2012-12-27 29 views
5

Tôi có hoạt động phân đoạn chuyển các đoạn trên nút bấm.
Hai mảnh vỡ mà tôi chuyển là:Chuyển từ đoạn bản đồ sang phân đoạn khác và quay lại

  1. Google bản đồ android v2 đoạn
  2. Một mảnh với một cái nhìn văn bản

Đây là cách tôi chuyển các mảnh vỡ:

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

     } 
    } 
} 

Mã số Bản đồ Fagment của tôi là

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

Nhưng mỗi khi tôi swich trở lại bản đồ phân mảnh treo ứng dụng. Làm thế nào tôi nên làm cho mã này phải không?

Trả lời

0

bạn đang tạo FragmentManager Null. xóa fm=null. Cũng trong vòng lặp khác bạn đang thay thế hai mảnh. Đừng thay thế đôi tại một thời điểm. trước khi gọi cam kết(), bạn chỉ thực hiện một thay thế

+0

Chúng thay thế cùng một bố cục R.id.lay_contaier –

+0

@nagaraj - tôi đã chỉnh sửa bài đăng nhưng vẫn giống ứng dụng vẫn treo – zoram

+0

trong mã bạn đã dán, không có lỗi. Bạn phải hiển thị cho tôi mã khác để tìm sai – TNR

6

Tôi nghi ngờ điều này đang xảy ra với bạn bởi vì bạn đã xác định đoạn bản đồ trong tệp bố cục XML của mình. Để trao đổi các mảnh theo cách này, bạn sẽ cần phải nhanh chóng bản đồ của bạn trong mã, giống như sau:

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

tôi thấy rằng mMapFragment.getMap() được trở về null, vì vậy đó là lý do tại sao bạn sẽ cần phải sắp xếp phần còn lại thiết lập thông qua phiên bản Handler. XML bố cục của tôi trông giống như sau:

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

Tôi hy vọng điều này sẽ hữu ích.

+1

Đây là một cách khá lỗi thời để thực hiện việc này ngay bây giờ, vì Google Play Services 6.5 trở lên bằng cách sử dụng phương thức 'mMapFragment.getMapAsync()' để được thông báo khi bản đồ được khởi tạo. – Thorinside

Các vấn đề liên quan