我正在开发应用程序并从对话框内的对话框布局文件中获取访问片段的错误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();
}
});
}
});
答案 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();
}
});
}
});