为什么在view中调用viewdidloadactivity方法没有

您现在正在浏览:
解决安卓android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
发布时间:
17:51:07 &
浏览次数:
摘要: 因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。...
解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的poi搜索正好符合我的需求,但是软件完成后发现在软件第一次执行的时候总是出错,百度地图无法返回搜索数据。
经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。
最后试了几种方法总算给做出了了。
首先讲下百度地图的执行吧。
我们的Activity需要继承百度的MapActivity,
在oncreate中初始化。
mapMgr = new BMapManager(this.getApplication());
//新建一个地图管理器mapMgr.init("百度地图mapkey", null);super.initMapActivity(mapMgr);//获取mapViewmv = (MapView) this.findViewById(R.id.bmapsView);mapCtrl = mv.getController();
//取得mapView的控制GeoPoint point = new GeoPoint((int)(31.E6), (int)(117.E6));mapCtrl.setCenter(point); //设置地图显示中心点mapCtrl.setZoom(16);
//设置放大等级
然后的直接在百度地图中使用mksearch,我的是失败了。
我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。
new Thread(new Runnable() {@Overridepublic void run() {mkSearch = new MKSearch();MKSearchListener searchListener = new MKSearchListener() {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult res, int type, int iError) {Log.i("maa","调用我吧");poiInfos = res.getAllPoi();if(res != null){jiaotonglist = new ArrayList();for(int i = 0;iMKPoiInfo poi = poiInfos.get(i);
String s = poi.name+":"+poi.GeoPoint pt = poi.int size = s.length();int x = (int)size/16;String s1 = "";String s2 = "";if(x>0){for(int j= 0;js1 = s.substring(j*16, (j+1)*16);s2 = s2+s1+"\n";}s2 = s2 +s.substring(x*16); s = s2;}Jiaotong jt = new Jiaotong(sxarray[i],s,R.drawable.suolue,pt);jiaotonglist.add(jt);}handler.sendEmptyMessage(1);//lv.requestFocus();//lv.requestFocus( View.FOCUS_DOWN);//刷新地图Log.i("maa","成功加载:"+searchType);}Log.i("maa","已经加载:"+searchType);}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}};mkSearch.init(mapMgr, searchListener);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}GeoPoint p = new GeoPoint((int)(31.E6), (int)(117.E6));mkSearch.poiSearchNearBy("公交车站", p, 5000);}}).start();
然后使用hanlder接收消息,将返回的数据写到界面里面就行了。
我的代码直接是不能运行的,主要跟大家说一下我的思路。
如果你有更好的方法,欢迎交流。回答1:因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的poi搜索正好符合我的需求,但是软件完成后发现在软件第一次执行的时候总是出错,百度地图无法返回搜索数据。
经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。
最后试了几种方法总算给做出了了。
首先讲下百度地图的执行吧。
我们的Activity需要继承百度的MapActivity,
在oncreate中初始化。
mapMgr = new BMapManager(this.getApplication());
//新建一个地图管理器mapMgr.init("百度地图mapkey", null);super.initMapActivity(mapMgr);//获取mapViewmv = (MapView) this.findViewById(R.id.bmapsView);mapCtrl = mv.getController();
//取得mapView的控制GeoPoint point = new GeoPoint((int)(31.E6), (int)(117.E6));mapCtrl.setCenter(point); //设置地图显示中心点mapCtrl.setZoom(16);
//设置放大等级
然后的直接在百度地图中使用mksearch,我的是失败了。
我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。
new Thread(new Runnable() {@Overridepublic void run() {mkSearch = new MKSearch();MKSearchListener searchListener = new MKSearchListener() {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult res, int type, int iError) {Log.i("maa","调用我吧");poiInfos = res.getAllPoi();if(res != null){jiaotonglist = new ArrayList();for(int i = 0;iMKPoiInfo poi = poiInfos.get(i);
String s = poi.name+":"+poi.GeoPoint pt = poi.int size = s.length();int x = (int)size/16;String s1 = "";String s2 = "";if(x>0){for(int j= 0;js1 = s.substring(j*16, (j+1)*16);s2 = s2+s1+"\n";}s2 = s2 +s.substring(x*16); s = s2;}Jiaotong jt = new Jiaotong(sxarray[i],s,R.drawable.suolue,pt);jiaotonglist.add(jt);}handler.sendEmptyMessage(1);//lv.requestFocus();//lv.requestFocus( View.FOCUS_DOWN);//刷新地图Log.i("maa","成功加载:"+searchType);}Log.i("maa","已经加载:"+searchType);}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}};mkSearch.init(mapMgr, searchListener);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}GeoPoint p = new GeoPoint((int)(31.E6), (int)(117.E6));mkSearch.poiSearchNearBy("公交车站", p, 5000);}}).start();
然后使用hanlder接收消息,将返回的数据写到界面里面就行了。
我的代码直接是不能运行的,主要跟大家说一下我的思路。
如果你有更好的方法,欢迎交流。
本周技术实现排行本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助主要代码如下:
ViewPager实现主要为适配器 MyPagerAdapter及页面切换监听MyOnPageChangeListener
注意实现其中的Override方法,调用子Activity的方式在MyOnPageChangeListener的 onPageSelected中实现
引用OneActivity中的
oneActivityDo();及TwoActivity中的oneActivityDo();具体实现就不详细列出了,只做个方法调用
其中调用子Activity中的方法主要实现为:
loadCurActivity(int arg0)
import android.app.A
import android.app.LocalActivityM
import android.content.I
import android.graphics.C
import android.os.B
import android.support.v4.view.PagerA
import android.support.v4.view.ViewP
import android.support.v4.view.ViewPager.OnPageChangeL
import android.util.L
import android.view.V
import android.view.ViewG
import android.widget.LinearL
import android.widget.TextV
public class MyViewPagerActivity extends Activity {
private ArrayList&View& mlistview = new ArrayList&View&(); //viewpager中的内容
private LocalActivityManager mactivityManager =
private ViewPager mvp_content =
private String[] mlistTag = {&one&,&two&}; //activity标识
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mactivityManager = new LocalActivityManager(this, true);
mactivityManager.dispatchCreate(savedInstanceState);
initPagerView();
private initPagerView(){
Intent intent = new Intent(getApplicationContext(), OneActivity.class);
View v1 = getView(mlistTag[0], intent);
mlistview.add(v1);
Intent intent2 = new Intent(getApplicationContext(), TwoActivity.class);
View v2 = getView(mlistTag[1], intent);
mlistview.add(v2);
mvp_content = (ViewPager) findViewById(R.id.vp_content);
mvp_content.setAdapter(new MyPagerAdapter(mlistview));
mvp_content.setCurrentItem(0);
mvp_content.setOnPageChangeListener(new MyOnPageChangeListener());
* Pager适配器
public class MyPagerAdapter extends PagerAdapter {
List&View& listview =
new ArrayList&View&();
public MyPagerAdapter(List&View& list) {
this.listview =
public void destroyItem(ViewGroup container, int position, Object obj) {
container.removeView(listview.get(position));
public Object instantiateItem(ViewGroup container, int position) {
container.addView(listview.get(position),0);
return listview.get(position);
public int getCount() {
return listview.size();
public boolean isViewFromObject(View v, Object obj) {
return v ==
* 页卡切换监听
public class MyOnPageChangeListener implements OnPageChangeListener {
public void onPageSelected(int arg0) {
int pos = 0;//记录hsv_column滚动位置
Log.i(&onPageSelected&, &position=&+arg0);
loadCurActivity(arg0);
public void onPageScrollStateChanged(int arg0) {
public void onPageScrolled(int arg0, float arg1, int arg2) {
* 通过activity获取视图
* @param id
* @param intent
private View getView(String id, Intent intent) {
return mactivityManager.startActivity(id, intent).getDecorView();
* @param arg0:页面位置
* @function:调用子Activity中的方法
private void loadCurActivity(int arg0){
Activity curActivity = mactivityManager.getActivity(mlistTag[arg0]);
switch(arg0){
if(curActivity != null && curActivity instanceof OneActivity){
((OneActivity)curActivity).oneActivityDo();
if(curActivity != null && curActivity instanceof TwoActivity){
((TwoActivity)curActivity).twoActivityDo();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8073次
排名:千里之外
原创:11篇
(1)(1)(1)(3)(3)(1)(1)(1)怎么让activity不重复执行onCreate方法
[问题点数:20分,结帖人wu]
怎么让activity不重复执行onCreate方法
[问题点数:20分,结帖人wu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。安卓Activity的两个神秘方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
20页免费10页免费1页免费2页免费2页免费30页2下载券16页免费6页免费6页免费3页免费
喜欢此文档的还喜欢18页免费
安卓Activity的两个神秘方法|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 activity 的文章

 

随机推荐