2016-12-31 1 views
0

다른보기 (A ViewPager, EditText 등)로 중첩 된 전체 화면 맵으로 구성된 Fragment을 만들고 싶습니다. 나는 두 개의 서로 다른 옵션을 생각했습니다전체 화면으로 사용자 정의 단편 만들기

  1. 레이아웃의 루트 근처 MapViewFragment을 만들고 match_parent로 설정 한 다음 정상으로 다른 View 년대를 사용합니다.
  2. 서브 클래스 MapFragment.
  3. 내가 MapFragment를 서브 클래 싱 한

이 조각을 표시

public class ListMapFragment extends MapFragment { 

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

     return super.onCreateView(inflater, container, savedInstanceState); 
    } 
} 

정상적으로 작동하고지도 전체 조각을 차지합니다. 그러나지도 위에서 위에 설명한 다양한보기를 표시하고 싶습니다. 나는 팽창하고 (당신처럼 정상적인 Fragment로) 대신보기를 반환하여 뷰를 반환하려고 경우 NPE가 발생하여 java.lang.NullPointerException : 인터페이스를 호출하는 시도에 의해

public class ListMapFragment extends MapFragment { 

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

     View view = inflater.inflate(R.layout.fragment_list_map, container, false); 
     return view; 
    } 
} 

를 일으켰습니다 내가보기를 반환하기 전에 슈퍼 메소드를 호출하려고하면 null 객체 참조에 대한 방법 '무효 maps.ad.yv는()'

, 레이아웃이로드되어 있지만지도는되지 않습니다 :

public class ListMapFragment extends MapFragment { 

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

     View view = inflater.inflate(R.layout.fragment_list_map, container, false); 

     super.onCreateView(inflater, container, savedInstanceState); 

     return view; 
    } 

두 옵션 중 하나가 다른 옵션보다 선호됩니까? 그리고 # 2가 선호된다면, 위의 코드에 어떤 문제가 있습니까?

답변

1

MapFragment의 기능을 실제로 수정하지 않는 한 해당 기능을 파생해서는 안됩니다. FrameLayout으로 조각을 만들고 MapView를 match_parent으로 만들고보기를 추가하면됩니다.

그리고 위의 코드도 마찬가지입니다. MapFragment에서 파생되고 해당 메서드를 재정의하면 초기화가 수행되지 않고 결과적으로 NPE가 발생합니다. 내가보기를 반환하기 전에 슈퍼 메소드를 호출하려고하면

0

는 레이아웃이로드되어 있지만지도는되지 않습니다 :

이 갈 수있는 방법입니다. 그러나지도를로드해야합니다.

public class MyMapFragment extends SupportMapFragment implements OnMapReadyCallback { 
    // extends SupportMapFragment, but MapFragment should work as well 

    View rootView; 
    private MapView mapView; 

    public MyMapFragment() {} 

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

     super.onCreateView(inflater, container, savedInstanceState); 

     rootView = inflater.inflate(R.layout.fragment_map, container, false); 

     mapView = (MapView) rootView.findViewById(R.id.map); 
     mapView.onCreate(savedInstanceState); 
     mapView.onResume(); 
     mapView.getMapAsync(this);//when you already implement OnMapReadyCallback in your fragment 

     return rootView; 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     mainActivity.googleMap = map; 
     // play with your map 
    } 
} 

XML의 fragment_map.xml

<com.google.android.gms.maps.MapView 
    android:id="@+id/map" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 
관련 문제