fragment中加入高德地图,viewpager切换时地图状态复原,并且多次切换会引起程序退出

loveobjc 2015-02-13 03:44:16
package com.jxtele.safehero.fragment;

import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.LocationSource;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.model.BitmapDescriptorFactory;
import com.amap.api.maps2d.model.MyLocationStyle;
import com.jxtele.safehero.R;
import com.jxtele.safehero.service.MapLocationSerice;
import com.jxtele.safehero.view.ActionItem;
import com.jxtele.safehero.view.BatteryView;
import com.jxtele.safehero.view.QuickAction;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

public class MapFragment extends Fragment implements LocationSource{

private Context ctx;
private MapView mapView;
private AMap aMap;
private TextView title;
private MapLocationSerice mapLocationSerice;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_map, container, false);

return v;
}

@Override
public void onViewCreated(View v, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(v, savedInstanceState);
mapView = (MapView) v.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
init(v);
}
/**
* 初始化AMap对象
*/
private void init(View v) {

if (aMap == null) {
aMap = mapView.getMap();
setUpMap();
}
title = (TextView) v.findViewById(R.id.title);
ctx = this.getActivity();

initBatteryView(v);
initPopMeun();

}

public void initBatteryView(View v) {
BatteryView batteryView = (BatteryView) v.findViewById(R.id.batteryView);
batteryView.setPower(100);
}

public void initPopMeun() {

ActionItem nextItem = new ActionItem(1, "Next", getResources().getDrawable(R.drawable.icon_people));
ActionItem prevItem = new ActionItem(2, "Prev", getResources().getDrawable(R.drawable.icon_set));
ActionItem searchItem = new ActionItem(3, "Find", getResources().getDrawable(R.drawable.icon_area));
ActionItem infoItem = new ActionItem(4, "Info", getResources().getDrawable(R.drawable.icon_interaction));

//use setSticky(true) to disable QuickAction dialog being dismissed after an item is clicked
prevItem.setSticky(true);
nextItem.setSticky(true);

//create QuickAction. Use QuickAction.VERTICAL or QuickAction.HORIZONTAL param to define layout
//orientation
final QuickAction quickAction = new QuickAction(ctx, QuickAction.VERTICAL);

//add action items into QuickAction
quickAction.addActionItem(nextItem);
quickAction.addActionItem(prevItem);
quickAction.addActionItem(searchItem);
quickAction.addActionItem(infoItem);

//Set listener for action item clicked
quickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
@Override
public void onItemClick(QuickAction source, int pos, int actionId) {
ActionItem actionItem = quickAction.getActionItem(pos);

//here we can filter which action item was clicked with pos or actionId parameter
if (actionId == 1) {
Toast.makeText(ctx, "Let's do some search action", Toast.LENGTH_SHORT).show();
} else if (actionId == 2) {
Toast.makeText(ctx, "I have no info this time", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ctx, actionItem.getTitle() + " selected", Toast.LENGTH_SHORT).show();
}
}
});

// //set listnener for on dismiss event, this listener will be called only if QuickAction dialog was dismissed
// //by clicking the area outside the dialog.
// quickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
// @Override
// public void onDismiss() {
// Toast.makeText(ctx, "Dismissed", Toast.LENGTH_SHORT).show();
// }
// });
//show on btn1
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
quickAction.show(v);
}
});
}


// @Override
// public void onDestroyView() {
// super.onDestroyView();
// ((ViewGroup) v.getParent()).removeView(v);
// }
/**
* 方法必须重写
*/
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}

/**
* 方法必须重写
*/
@Override
public void onPause() {
super.onPause();
mapView.onPause();
deactivate();
}

/**
* 方法必须重写
*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}

/**
* 方法必须重写
*/
@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
deactivate();
}

public TextView getTitle() {
return this.title;
}

private void setUpMap() {
aMap.setLocationSource(this);
aMap.getUiSettings().setMyLocationButtonEnabled(false);
aMap.setMyLocationEnabled(true);
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.locatin_img));
aMap.setMyLocationStyle(myLocationStyle);
aMap.moveCamera(CameraUpdateFactory.zoomBy(aMap.getCameraPosition().zoom - 2));
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
}



@Override
public void deactivate() {
if (mapLocationSerice != null) {
mapLocationSerice.stopLocation();
}
mapLocationSerice = null;
}

@Override
public void activate(OnLocationChangedListener listener) {
if(mapLocationSerice == null) {
mapLocationSerice = MapLocationSerice.getInstance(this.getActivity());
mapLocationSerice.requestLocationData(60*1000, 10, listener);
}
}



我在切换fragment时,地图状态会还原,当经过多次切换后地图不显示。最后会引起退出
...全文
344 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanguyuan 2015-04-24
  • 打赏
  • 举报
回复
同问!整了两天都没结果
loveobjc 2015-02-13
  • 打赏
  • 举报
回复
来个牛人帮忙解决下,实在不知什么原因。弄了一整天了

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧