在android中有寻呼机片段内的地图的对话框

时间:2017-05-03 16:07:47

标签: android google-maps android-fragments

我正在开发应用程序并从对话框内的对话框布局文件中获取访问片段的错误null。实际上我想在单击分页器片段内的列表视图时在对话框中显示地图。

对话框布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<fragment
    android:id="@+id/mapevent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Close"
    android:id="@+id/close"
    android:background="@null"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />

我附加对话框的片段文件和对话框。它的工作,而我试图让地图对象添加标记然后我没有得到支持地图片段的对象

public class Event extends Fragment {
private ListView listView;
.
.
.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_item_three, container, false);
   if(map_dialog==null)
    map_dialog= new Dialog(getActivity());

    listView = (ListView) view.findViewById(R.id.event_list);
    dialog.show();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
           dialog.show();

            map_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            map_dialog.setContentView(R.layout.dialog_layout);
            map_dialog.show();

            MapsInitializer.initialize(getActivity());
            FragmentManager myFragmentManager = getActivity().getSupportFragmentManager();
             mMapView = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
            mMapView.onCreate(map_dialog.onSaveInstanceState());
            mMapView.onResume();// needed to get the map to display immediately
            mMapView.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(GoogleMap googleMap) {

                    latLng=new LatLng(Double.parseDouble(eventList.get(position).getLat()),Double.parseDouble(eventList.get(position).getLng()));
                    googleMap.addMarker(new MarkerOptions().position(latLng));
                    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                    googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
                    dialog.dismiss();
                }
            });
        }
    });

1 个答案:

答案 0 :(得分:0)

试试这个:

FragmentManager myFragmentManager = getActivity().getSupportFragmentManager();
mMapView = (SupportMapFragment) myFragmentManager.findFragmentById(R.id.mapevent);

对于对话框,您可以使用MapView代替SupportMapFragment

<com.google.android.gms.maps.MapView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:id="@+id/map" />

Fragment

中执行此操作
MapView mMapView;


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {

        dialog.show();

        map_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        map_dialog.setContentView(R.layout.dialog_layout);
        map_dialog.show();

        mMapView = (MapView) map_dialog.findViewById(R.id.map);
        mMapView.onCreate(map_dialog.savedInstanceState);
        mMapView.onResume();// needed to get the map to display immediately

        try {
            MapsInitializer.initialize(this.getActivity());
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {

                latLng = new LatLng(Double.parseDouble(eventList.get(position).getLat()),Double.parseDouble(eventList.get(position).getLng()));
                googleMap.addMarker(new MarkerOptions().position(latLng));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
                dialog.dismiss();
            }
        });
    }
});