Android 如何将此代码用于不在活动GMapV2Directions中的片段
好的,这是我的活动代码,我在其中使用mapfragment并显示路线,但我需要在片段中执行此操作,而不是在活动中这是代码 我需要将该类扩展为片段而不是片段活动Android 如何将此代码用于不在活动GMapV2Directions中的片段,android,google-maps,android-fragments,android-activity,google-maps-api-2,Android,Google Maps,Android Fragments,Android Activity,Google Maps Api 2,好的,这是我的活动代码,我在其中使用mapfragment并显示路线,但我需要在片段中执行此操作,而不是在活动中这是代码 我需要将该类扩展为片段而不是片段活动 public class NavigationActivity extends FragmentActivity { private static final LatLng AMSTERDAM = new LatLng(52.37518, 4.895439); private static final LatLng PA
public class NavigationActivity extends FragmentActivity {
private static final LatLng AMSTERDAM = new LatLng(52.37518, 4.895439);
private static final LatLng PARIS = new LatLng(48.856132, 2.352448);
private static final LatLng FRANKFURT = new LatLng(50.111772, 8.682632);
private GoogleMap map;
private SupportMapFragment fragment;
private LatLngBounds latlngBounds;
private Button bNavigation;
private Polyline newPolyline;
private boolean isTravelingToParis = false;
private int width, height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
getSreenDimanstions();
fragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
map = fragment.getMap();
bNavigation = (Button) findViewById(R.id.bNavigation);
bNavigation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isTravelingToParis)
{
isTravelingToParis = true;
findDirections( AMSTERDAM.latitude, AMSTERDAM.longitude,PARIS.latitude, PARIS.longitude, GMapV2Direction.MODE_DRIVING );
}
else
{
isTravelingToParis = false;
findDirections( AMSTERDAM.latitude, AMSTERDAM.longitude, FRANKFURT.latitude, FRANKFURT.longitude, GMapV2Direction.MODE_DRIVING );
}
}
});
}
@Override
protected void onResume() {
super.onResume();
latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
public void handleGetDirectionsResult(ArrayList<LatLng> directionPoints) {
PolylineOptions rectLine = new PolylineOptions().width(5).color(Color.RED);
for(int i = 0 ; i < directionPoints.size() ; i++)
{
rectLine.add(directionPoints.get(i));
}
if (newPolyline != null)
{
newPolyline.remove();
}
newPolyline = map.addPolyline(rectLine);
if (isTravelingToParis)
{
latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS);
map.animateCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
else
{
latlngBounds = createLatLngBoundsObject(AMSTERDAM, FRANKFURT);
map.animateCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
}
private void getSreenDimanstions()
{
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
}
private LatLngBounds createLatLngBoundsObject(LatLng firstLocation, LatLng secondLocation)
{
if (firstLocation != null && secondLocation != null)
{
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(firstLocation).include(secondLocation);
return builder.build();
}
return null;
}
public void findDirections(double fromPositionDoubleLat, double fromPositionDoubleLong, double toPositionDoubleLat, double toPositionDoubleLong, String mode)
{
Map<String, String> map = new HashMap<String, String>();
map.put(GetDirectionsAsyncTask.USER_CURRENT_LAT, String.valueOf(fromPositionDoubleLat));
map.put(GetDirectionsAsyncTask.USER_CURRENT_LONG, String.valueOf(fromPositionDoubleLong));
map.put(GetDirectionsAsyncTask.DESTINATION_LAT, String.valueOf(toPositionDoubleLat));
map.put(GetDirectionsAsyncTask.DESTINATION_LONG, String.valueOf(toPositionDoubleLong));
map.put(GetDirectionsAsyncTask.DIRECTIONS_MODE, mode);
GetDirectionsAsyncTask asyncTask = new GetDirectionsAsyncTask(this);
asyncTask.execute(map);
}
}
导航活动
public class NavigationActivity extends FragmentActivity {
private static final LatLng AMSTERDAM = new LatLng(52.37518, 4.895439);
private static final LatLng PARIS = new LatLng(48.856132, 2.352448);
private static final LatLng FRANKFURT = new LatLng(50.111772, 8.682632);
private GoogleMap map;
private SupportMapFragment fragment;
private LatLngBounds latlngBounds;
private Button bNavigation;
private Polyline newPolyline;
private boolean isTravelingToParis = false;
private int width, height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
getSreenDimanstions();
fragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
map = fragment.getMap();
bNavigation = (Button) findViewById(R.id.bNavigation);
bNavigation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isTravelingToParis)
{
isTravelingToParis = true;
findDirections( AMSTERDAM.latitude, AMSTERDAM.longitude,PARIS.latitude, PARIS.longitude, GMapV2Direction.MODE_DRIVING );
}
else
{
isTravelingToParis = false;
findDirections( AMSTERDAM.latitude, AMSTERDAM.longitude, FRANKFURT.latitude, FRANKFURT.longitude, GMapV2Direction.MODE_DRIVING );
}
}
});
}
@Override
protected void onResume() {
super.onResume();
latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
public void handleGetDirectionsResult(ArrayList<LatLng> directionPoints) {
PolylineOptions rectLine = new PolylineOptions().width(5).color(Color.RED);
for(int i = 0 ; i < directionPoints.size() ; i++)
{
rectLine.add(directionPoints.get(i));
}
if (newPolyline != null)
{
newPolyline.remove();
}
newPolyline = map.addPolyline(rectLine);
if (isTravelingToParis)
{
latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS);
map.animateCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
else
{
latlngBounds = createLatLngBoundsObject(AMSTERDAM, FRANKFURT);
map.animateCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150));
}
}
private void getSreenDimanstions()
{
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
}
private LatLngBounds createLatLngBoundsObject(LatLng firstLocation, LatLng secondLocation)
{
if (firstLocation != null && secondLocation != null)
{
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(firstLocation).include(secondLocation);
return builder.build();
}
return null;
}
public void findDirections(double fromPositionDoubleLat, double fromPositionDoubleLong, double toPositionDoubleLat, double toPositionDoubleLong, String mode)
{
Map<String, String> map = new HashMap<String, String>();
map.put(GetDirectionsAsyncTask.USER_CURRENT_LAT, String.valueOf(fromPositionDoubleLat));
map.put(GetDirectionsAsyncTask.USER_CURRENT_LONG, String.valueOf(fromPositionDoubleLong));
map.put(GetDirectionsAsyncTask.DESTINATION_LAT, String.valueOf(toPositionDoubleLat));
map.put(GetDirectionsAsyncTask.DESTINATION_LONG, String.valueOf(toPositionDoubleLong));
map.put(GetDirectionsAsyncTask.DIRECTIONS_MODE, mode);
GetDirectionsAsyncTask asyncTask = new GetDirectionsAsyncTask(this);
asyncTask.execute(map);
}
}
公共类导航活动扩展了碎片活动{
阿姆斯特丹私人静态最终车床=新车床(52.37518,4.895439);
私人静态最终车床巴黎=新车床(48.856132,2.352448);
法兰克福私人静态最终车床=新车床(50.111772,8.682632);
私人谷歌地图;
私有支持图片段;
私人停车场停车场;
私人航空;
私有多段线新建多段线;
私有布尔值isTravelingToParis=false;
私人int宽度、高度;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u导航);
getsreendimanstations();
片段=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map));
map=fragment.getMap();
bNavigation=(按钮)findViewById(R.id.bNavigation);
bNavigation.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(!isTravelingToParis)
{
isTravelingToParis=真;
查找方向(阿姆斯特丹.纬度,阿姆斯特丹.经度,巴黎.纬度,巴黎.经度,GMapV2Direction.MODE_驾驶);
}
其他的
{
isTravelingToParis=假;
查找方向(阿姆斯特丹.纬度,阿姆斯特丹.经度,法兰克福.纬度,法兰克福.经度,GMapV2Direction.MODE_驾驶);
}
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();
latlngBounds=createLatLngBoundsObject(阿姆斯特丹,巴黎);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds,宽度,高度,150));
}
公共无效handleGetDirectionsResult(ArrayList directionPoints){
PolylineOptions rectLine=新的PolylineOptions().width(5).color(color.RED);
对于(int i=0;i
**所以我也需要改变这些课程**
public class GetDirectionsAsyncTask extends AsyncTask<Map<String, String>, Object, ArrayList<LatLng>>
{
public static final String USER_CURRENT_LAT = "user_current_lat";
public static final String USER_CURRENT_LONG = "user_current_long";
public static final String DESTINATION_LAT = "destination_lat";
public static final String DESTINATION_LONG = "destination_long";
public static final String DIRECTIONS_MODE = "directions_mode";
private NavigationActivity activity;
private Exception exception;
private ProgressDialog progressDialog;
public GetDirectionsAsyncTask(NavigationActivity activity)
{
super();
this.activity = activity;
}
public void onPreExecute()
{
progressDialog = new ProgressDialog(activity);
progressDialog.setMessage("Calculating directions");
progressDialog.show();
}
@Override
public void onPostExecute(ArrayList result)
{
progressDialog.dismiss();
if (exception == null)
{
activity.handleGetDirectionsResult(result);
}
else
{
processException();
}
}
@Override
protected ArrayList<LatLng> doInBackground(Map<String, String>... params)
{
Map<String, String> paramMap = params[0];
try
{
LatLng fromPosition = new LatLng(Double.valueOf(paramMap.get(USER_CURRENT_LAT)) , Double.valueOf(paramMap.get(USER_CURRENT_LONG)));
LatLng toPosition = new LatLng(Double.valueOf(paramMap.get(DESTINATION_LAT)) , Double.valueOf(paramMap.get(DESTINATION_LONG)));
GMapV2Direction md = new GMapV2Direction();
Document doc = md.getDocument(fromPosition, toPosition, paramMap.get(DIRECTIONS_MODE));
ArrayList<LatLng> directionPoints = md.getDirection(doc);
return directionPoints;
}
catch (Exception e)
{
exception = e;
return null;
}
}
private void processException()
{
Toast.makeText(activity, "Error retriving data", 3000).show();
}
}
公共类GetDirectionAsyncTask扩展了AsyncTask
{
公共静态最终字符串USER\u CURRENT\u LAT=“USER\u CURRENT\u LAT”;
公共静态最终字符串USER\u CURRENT\u LONG=“USER\u CURRENT\u LONG”;
公共静态最终字符串DESTINATION\u LAT=“DESTINATION\u LAT”;
公共静态最终字符串DESTINATION\u LONG=“DESTINATION\u LONG”;
公共静态最终字符串方向\u MODE=“方向\u MODE”;
私人航行活动;
私人例外;
私有进程对话;
公共GetDirectionAsyncTask(导航活动活动)
{
超级();
这个。活动=活动;
}
公共无效onPreExecute()
{
progressDialog=新建progressDialog(活动);
progressDialog.setMessage(“计算方向”);
progressDialog.show();
}
@凌驾
PostExecute上的公共void(ArrayList结果)
{
progressDialog.disclose();
if(异常==null)
{
活动.handleGetDirectionsResult(结果);
}
其他的
{
processException();
}
}
@凌驾
受保护的ArrayList doInBackground(映射…参数)
{
Map paramMap=params[0];
尝试
{
LatLng fromPosition=新LatLng(Double.valueOf(paramMap.get(USER_CURRENT_LAT)),Double.valueOf(paramMap.get(USER_CURRENT_LONG));
LatLng拓扑位置=新LatLng(Double.valueOf(paramMap.get(DESTINATION_LAT)),