activitygroup中有四个子activity,默认显示的是地图activity,刚开始初始化时地图activity可以显示,但是在点击其他activity后,返回地图activity,地图不能显示...
注意:我现在用的是百度地图,之前用google地图没有这个问题。
注意:我现在用的是百度地图,之前用google地图没有这个问题。
解决方案 »
- 例如我开了一个浏览器,然后我点击浏览器上的普通文字,这个时候我能不能获取到点中的文字,然后传递给我自己的程序?
- Android怎样获取CPU使用率
- 关于android单元测试的问题
- 求高人助:sip video非对称协商
- 本人想学android,但是没有java基础,会不会很难啊?
- 判断GPS是否开启问题
- Grid View中能否嵌套TextView
- preference_headers3.0系统为何创建不了
- 在Android2.3上运行app时出现json解析异常,而在4.0则没有求解。
- 让手机自动安装sd卡中的apk软件
- 在图片上写字
- 请教下android客户端文件上传到servlet和PHP服务器一样吗
public class MainGroup extends ActivityGroup { private String TAG = this.getClass().getSimpleName(); public static final String ACTION_REFRESH_FAVORITE = "com.vehicle4me.refreshFavorite";
public static final String ACTION_REFRESH_HISTORY = "com.vehicle4me.refreshHistory";
public static final String ACTION_POSITION = "com.vehicle4me.position";
public static final String ACTION_CHILD_BACKPRESS = "com.vehicle4me.maingroup.childbackpress"; private static final int REQUEST_SPLASH = 0x100; public static enum ActivityId {
FINDERCAR, FAVORITE, HISTORY, MORE
};
//线程池
public static LinkedList<View> findercarViewList = new LinkedList<View>();
public static LinkedList<View> favoriteViewList = new LinkedList<View>();
public static LinkedList<View> historyViewList = new LinkedList<View>();
public static LinkedList<View> moreViewList = new LinkedList<View>(); // private RelativeLayout mMainGroup;
// private View mSplash;
private FrameLayout mActivityContainer;
private RadioGroup mTabbar;
private Intent locationServiceIntent = null; private BroadcastReceiver childBackPressReciver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
onBackPressed();
}
}; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.maingroup); getWindow().setBackgroundDrawableResource(R.color.white);
// mMainGroup = (RelativeLayout) findViewById(R.id.rl_maingroup);
mActivityContainer = (FrameLayout) findViewById(R.id.activity_container);
// mSplash = findViewById(R.id.view_splash);
initTabbar();
Log.e("test", "MainGroup onCreate--");
if (MyApplication.res == null)
MyApplication.res = this.getResources(); Intent i = new Intent(MainGroup.this, SplashActivity.class);
startActivityForResult(i, REQUEST_SPLASH); registerReceiver(childBackPressReciver, new IntentFilter(
ACTION_CHILD_BACKPRESS));
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_SPLASH) {
if (resultCode == RESULT_OK) {
mTabbar.check(R.id.radio_finder);
} else {
finish();
}
}
} private final void initTabbar() {
mTabbar = (RadioGroup) findViewById(R.id.rg_tabbar); mTabbar.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.i(TAG, "tab bar checked changed :" + checkedId);
switch (checkedId) {
case R.id.radio_finder:
if (findercarViewList.size() == 0
|| findercarViewList.size() == 1) {
findercarViewList.clear();
startSubActivity(ActivityId.FINDERCAR);
} else {
mActivityContainer.removeAllViews();
mActivityContainer.addView(findercarViewList.getLast());
}
break;
case R.id.radio_favorite:
if (favoriteViewList.size() == 0) {
startSubActivity(ActivityId.FAVORITE);
} else {
mActivityContainer.removeAllViews();
mActivityContainer.addView(favoriteViewList.getLast());
}
sendBroadcast(new Intent(ACTION_REFRESH_FAVORITE));
break;
case R.id.radio_history:
if (historyViewList.size() == 0) {
startSubActivity(ActivityId.HISTORY);
} else {
mActivityContainer.removeAllViews();
mActivityContainer.addView(historyViewList.getLast());
}
sendBroadcast(new Intent(ACTION_REFRESH_HISTORY));
break;
case R.id.radio_more:
if (moreViewList.size() == 0) {
startSubActivity(ActivityId.MORE);
} else {
mActivityContainer.removeAllViews();
mActivityContainer.addView(moreViewList.getLast());
}
break;
default:
break;
} }
});
} public void startSubActivity(Class<?> cls, ActivityId id) {
mActivityContainer.removeAllViews();
Intent intent = new Intent(MainGroup.this, cls);
Window w = getLocalActivityManager().startActivity(id.name(), intent);
View v = w.getDecorView();
if (v != null) {
mActivityContainer.addView(v);
}
if (ActivityId.FINDERCAR == id) {
mTabbar.check(R.id.radio_finder);
}
} public void startSubActivity(ActivityId childId) {
mActivityContainer.removeAllViews();
String tag = childId.name();
Class<?> cls;
switch (childId) {
case FINDERCAR:
cls = FindMapActivity.class;
break;
case FAVORITE:
cls = FavoriteActivity.class;
break;
case HISTORY:
cls = HistoryActivity.class;
break;
case MORE:
cls = MoreActivity.class;
break; default:
cls = FindMapActivity.class;
break;
} Intent intent = new Intent(MainGroup.this, cls);
if (cls == FindMapActivity.class) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
Window w = getLocalActivityManager().startActivity(tag, intent);
View v = w.getDecorView();
if (v != null) {
switch (childId) {
case FINDERCAR:
findercarViewList.addLast(v);
break;
case FAVORITE:
favoriteViewList.addLast(v);
break;
case HISTORY:
historyViewList.addLast(v);
break;
case MORE:
moreViewList.addLast(v);
break; default:
return;
}
mActivityContainer.addView(v);
}
} public void startSubChid(ActivityId parentId, Intent intent) {
mActivityContainer.removeAllViews();
System.out.println("-----------------"
+ intent.getComponent().getClassName());
Window w = getLocalActivityManager().startActivity(
intent.getComponent().getShortClassName(), intent);
View v = w.getDecorView();
if (v != null) {
switch (parentId) {
case FINDERCAR:
findercarViewList.addLast(v);
break;
case FAVORITE:
favoriteViewList.addLast(v);
break;
case HISTORY:
historyViewList.addLast(v);
break;
case MORE:
moreViewList.addLast(v);
break; default:
return;
}
mActivityContainer.addView(v);
}
} public int getChecked() {
int id = mTabbar.getCheckedRadioButtonId(); return id;
} public void checkTab(ActivityId aid) {
switch (aid) {
case FINDERCAR:
mTabbar.check(R.id.radio_finder);
break;
case FAVORITE:
mTabbar.check(R.id.radio_favorite);
break;
case HISTORY:
mTabbar.check(R.id.radio_history);
break;
case MORE:
mTabbar.check(R.id.radio_more);
break; default:
return;
}
} public void subChildGoBack(ActivityId parentId, Class<?> cls) {
mActivityContainer.removeAllViews();
View v;
switch (parentId) {
case FINDERCAR:
findercarViewList.removeLast();
v = findercarViewList.getLast();
break;
case FAVORITE:
favoriteViewList.removeLast();
v = favoriteViewList.getLast();
break;
case HISTORY:
historyViewList.removeLast();
v = historyViewList.getLast();
break;
case MORE:
moreViewList.removeLast();
v = moreViewList.getLast();
break;
default:
return;
} mActivityContainer.addView(v);
System.out.println("--------------------" + cls.getName());
destroyActivity(cls.getName()); } public boolean destroySubActivity(ActivityId aid) {
return destroyActivity(aid.name());
} public boolean destroyActivity(String id) {
final LocalActivityManager activityManager = getLocalActivityManager();
if (activityManager != null) {
activityManager.destroyActivity(id, false);
// http://code.google.com/p/android/issues/detail?id=12359
// http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/app/LocalActivityManager.java
try {
final Field mActivitiesField = LocalActivityManager.class
.getDeclaredField("mActivities");
if (mActivitiesField != null) {
mActivitiesField.setAccessible(true);
@SuppressWarnings("unchecked")
final Map<String, Object> mActivities = (Map<String, Object>) mActivitiesField
.get(activityManager);
if (mActivities != null) {
mActivities.remove(id);
}
final Field mActivityArrayField = LocalActivityManager.class
.getDeclaredField("mActivityArray");
if (mActivityArrayField != null) {
mActivityArrayField.setAccessible(true);
@SuppressWarnings("unchecked")
final ArrayList<Object> mActivityArray = (ArrayList<Object>) mActivityArrayField
.get(activityManager);
if (mActivityArray != null) {
for (Object record : mActivityArray) {
final Field idField = record.getClass()
.getDeclaredField("id");
if (idField != null) {
idField.setAccessible(true);
final String _id = (String) idField
.get(record);
if (id.equals(_id)) {
mActivityArray.remove(record);
break;
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
return false;
} @Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(childBackPressReciver);
findercarViewList.clear();
favoriteViewList.clear();
historyViewList.clear();
moreViewList.clear();
if (locationServiceIntent != null)
this.stopService(locationServiceIntent);
System.exit(0);
}
@Override
protected void onResume() { System.out.println("FindMap---------on resume");
if (mapManager != null) {
System.out.println("mapManager is not null");
mapManager.start();
}
super.onResume();
IntentFilter filter = new IntentFilter(MainGroup.ACTION_POSITION);
registerReceiver(positionReceiver, filter);
System.out.println("FindMap registerReceiver");
} @Override
protected void onPause() { System.out.println("FindMap---------onpause");
if (mapManager != null) {
mapManager.stop();
}
super.onPause();
}
代码
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.Projection;
import com.life.hua.activity.BaseApplication;
import com.life.hua.activity.R;
import com.life.hua.entity.MapInfo;
import com.life.hua.util.Configer;
import com.life.hua.util.Util;public class MyLocalMapActivity extends MapActivity {
LocationListener mLocationListener = null;// onResume时注册此listener,onPause时需要Remove
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
private Context mContext;
private MapView mapView;
BaseApplication baseApp;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
this.mContext = this; baseApp = (BaseApplication) this.getApplication();
if (baseApp.mBMapManage == null) {
baseApp.mBMapManage = new BMapManager(mContext);
baseApp.mBMapManage.init(baseApp.mStrKey,
new BaseApplication.MyGeneralListener());
} else { baseApp.mBMapManage.start();
}
setContentView(R.layout.baidumap_layout);
mapView = (MapView) findViewById(R.id.bmapView);
}
private MapInfo mapInfo;
private MapController mMapController;
MyOverlay myOverlay;
@Override
protected void onResume() { // 注册定位事件
System.out.println("onResume");
mapView.removeAllViews();
super.initMapActivity(baseApp.mBMapManage);
mMapController = mapView.getController();
baseApp.mBMapManage.start();
// 恢复地图状态
if (mapInfo != null) {
mMapController.setCenter(mapInfo.getCenter());
mMapController.setZoom(mapInfo.getZoomLevel());// 放大级别
mMapController.animateTo(mapInfo.getCenter());
} else {
GeoPoint geoPoint = new GeoPoint((int) (Configer.la * 1e6),
(int) (Configer.lo * 1e6));
mMapController.zoomIn();// 放大级别
mMapController.animateTo(geoPoint);
}
mapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件
mapView.setDrawOverlayWhenZooming(true);
myOverlay = new MyOverlay();
mapView.getOverlays().add(myOverlay);
super.onResume();
}
@Override
protected void onPause() {
System.out.println("onPause");
// 保存地图状态
if (mapInfo == null) {
mapInfo = new MapInfo();
}
mapInfo.setCenter(mapView.getMapCenter());
mapInfo.setZoom(mapView.getZoomLevel()); BaseApplication app = (BaseApplication) this.getApplication();
app.mBMapManage.getLocationManager().removeUpdates(mLocationListener);
app.mBMapManage.stop();
super.onPause();
}
@Override
protected void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
BaseApplication app = (BaseApplication) this.getApplication();
app.mBMapManage.getLocationManager().removeUpdates(mLocationListener);
mapView.removeAllViews();
app.mBMapManage.stop();
System.out.println("onDestroy");
}
// 画自己位置图
class MyOverlay extends Overlay {
private Bitmap bgBitmap; public MyOverlay() {
bgBitmap = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.mylocation);
} @Override
public void draw(Canvas canvas, MapView mapView, boolean arg2) {
super.draw(canvas, mapView, arg2);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTypeface(Typeface.MONOSPACE);
paint.setTextSize(14);
Point point = new Point();
Projection projection = mapView.getProjection();
GeoPoint geoPoint = new GeoPoint((int) (Configer.la * 1e6),
(int) (Configer.lo * 1e6));
projection.toPixels(geoPoint, point);
int bgWidth = bgBitmap.getWidth();
int bgHeight = bgBitmap.getHeight();
canvas.drawBitmap(bgBitmap, point.x - bgWidth / 2, point.y
- bgHeight, paint);// 画背景
canvas.drawText("我在这!", point.x - bgWidth / 2 + 30, point.y
- bgHeight / 2, paint);
}
}
我用的也是百度地图,解决办法就是保存地图的状态,在onPause把geopoint,跟zoomlevel保存;onResume进行获取;代码如下:import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.Projection;
import com.life.hua.activity.BaseApplication;
import com.life.hua.activity.R;
import com.life.hua.entity.MapInfo;
import com.life.hua.util.Configer;
import com.life.hua.util.Util;public class MyLocalMapActivity extends MapActivity {
LocationListener mLocationListener = null;// onResume时注册此listener,onPause时需要Remove
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
private Context mContext;
private MapView mapView;
BaseApplication baseApp;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
this.mContext = this; baseApp = (BaseApplication) this.getApplication();
if (baseApp.mBMapManage == null) {
baseApp.mBMapManage = new BMapManager(mContext);
baseApp.mBMapManage.init(baseApp.mStrKey,
new BaseApplication.MyGeneralListener());
} else { baseApp.mBMapManage.start();
}
setContentView(R.layout.baidumap_layout);
mapView = (MapView) findViewById(R.id.bmapView);
}
private MapInfo mapInfo;
private MapController mMapController;
MyOverlay myOverlay;
@Override
protected void onResume() { // 注册定位事件
System.out.println("onResume");
mapView.removeAllViews();
super.initMapActivity(baseApp.mBMapManage);
mMapController = mapView.getController();
baseApp.mBMapManage.start();
// 恢复地图状态
if (mapInfo != null) {
mMapController.setCenter(mapInfo.getCenter());
mMapController.setZoom(mapInfo.getZoomLevel());// 放大级别
mMapController.animateTo(mapInfo.getCenter());
} else {
GeoPoint geoPoint = new GeoPoint((int) (Configer.la * 1e6),
(int) (Configer.lo * 1e6));
mMapController.zoomIn();// 放大级别
mMapController.animateTo(geoPoint);
}
mapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件
mapView.setDrawOverlayWhenZooming(true);
myOverlay = new MyOverlay();
mapView.getOverlays().add(myOverlay);
super.onResume();
}
@Override
protected void onPause() {
System.out.println("onPause");
// 保存地图状态
if (mapInfo == null) {
mapInfo = new MapInfo();
}
mapInfo.setCenter(mapView.getMapCenter());
mapInfo.setZoom(mapView.getZoomLevel()); BaseApplication app = (BaseApplication) this.getApplication();
app.mBMapManage.getLocationManager().removeUpdates(mLocationListener);
app.mBMapManage.stop();
super.onPause();
}
@Override
protected void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
BaseApplication app = (BaseApplication) this.getApplication();
app.mBMapManage.getLocationManager().removeUpdates(mLocationListener);
mapView.removeAllViews();
app.mBMapManage.stop();
System.out.println("onDestroy");
}
// 画自己位置图
class MyOverlay extends Overlay {
private Bitmap bgBitmap; public MyOverlay() {
bgBitmap = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.mylocation);
} @Override
public void draw(Canvas canvas, MapView mapView, boolean arg2) {
super.draw(canvas, mapView, arg2);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTypeface(Typeface.MONOSPACE);
paint.setTextSize(14);
Point point = new Point();
Projection projection = mapView.getProjection();
GeoPoint geoPoint = new GeoPoint((int) (Configer.la * 1e6),
(int) (Configer.lo * 1e6));
projection.toPixels(geoPoint, point);
int bgWidth = bgBitmap.getWidth();
int bgHeight = bgBitmap.getHeight();
canvas.drawBitmap(bgBitmap, point.x - bgWidth / 2, point.y
- bgHeight, paint);// 画背景
canvas.drawText("我在这!", point.x - bgWidth / 2 + 30, point.y
- bgHeight / 2, paint);
}
}