2016-12-31 2 views
0

Fragmentは、他のビュー(A ViewPagerEditTextなど)でオーバーレイされたフルスクリーンマップで構成されています。その後、通常のように、他のView年代を使用し、レイアウトの根の近くにMapViewFragmentを作成し、match_parentに設定フルスクリーンマップでカスタムフラグメントを作成する

  1. :私は2つの異なるオプションを考えてきました。
  2. サブクラスMapFragment

私は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つのオプションのうち、一方が他方より優先されますか? #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" /> 
関連する問題