【问题标题】:Searching location in android map via edittext通过edittext在android地图中搜索位置
【发布时间】:2013-01-28 12:02:33
【问题描述】:

我正在使用 android 开发地图服务,我想在我的地图中搜索一个特定的地方,比如“柏林”。为此,我在我的地图中放置了一个 EDITTEXT,每当我输入名称时,我都希望在我的地图中用标记指向那个地方。

这是我的 HelloItemizedOverlay 类:

 public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem>
 {
 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 private Context mContext;

 public HelloItemizedOverlay(Drawable defaultMarker, Context context)
{
 super(boundCenterBottom(defaultMarker));
 mContext = context;
}

public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}
@Override
public int size()
{
return mOverlays.size();
}
@Override
protected boolean onTap(int index)
{
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
 }

这是我的主要课程:

 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 setContentView(R.layout.main);
 mapView = (MapView) findViewById(R.id.mapView);

 mapSearchBox = (EditText)findViewById(R.id.search);
 mapSearchBox.setOnTouchListener(new View.OnTouchListener(){
 public boolean onTouch(View view, MotionEvent motionEvent) {                                                       

 List<Address> addresses = geocoder.getFromLocationName(mapSearchBox.getText().toString(),5);

    if(addresses.size() > 0)
    {
       GeoPoint  p = new GeoPoint( (int) (addresses.get(0).getLatitude() * 1E6), 
                          (int) (addresses.get(0).getLongitude() * 1E6));

           controller.animateTo(p);
           controller.setZoom(12);

           List<Overlay> mapOverlays = mapView.getOverlays();
           Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
           HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
           OverlayItem overlayitem = new OverlayItem(p,"","");
           itemizedoverlay.addOverlay(overlayitem);
           mapOverlays.add(itemizedoverlay);
           mapView.invalidate();
           mapSearchBox.setText("");
    }
    else
    {
            AlertDialog.Builder adb = new AlertDialog.Builder(GoogleMapActivity.this);
            adb.setTitle("Google Map");
            adb.setMessage("Please Provide the Proper Place");
            adb.setPositiveButton("Close",null);
            adb.show();
    }                
    return false;
    }});


    LocationManager locationManager = (LocationManager) getSystemService(this.LOCATION_SERVICE);
    LocationListener listener = new MylocationListener();
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,listener);
    }

在这里我收到一条错误消息:

    Drawable drawable = this.getResources().getDrawable(R.drawable.icon); 

说 getresource 方法对于新视图是未定义的。触摸监听器;下一行还显示了另一个错误:

    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);

构造函数 HelloItemizedOverlay 未定义。

有人知道建议吗?如果是这样,请帮个忙。提前致谢!!

【问题讨论】:

标签: android google-maps ontouchlistener itemizedoverlay


【解决方案1】:

中删除

this.getResources().getDrawable(R.drawable.icon);

看看它对你有没有帮助..

【讨论】:

  • 这也减少了第一行的错误。第二行仍然保持不变。
  • 这样做之后,我在该行中遇到另一个错误: List
    addresses = geocoder.getFromLocationName(mapSearchBox.getText().toString(),5);它说一个空指针异常。为此,我使用 try/catch 块进行了尝试,这会导致应用程序强制关闭。
  • 我已经遇到了同样的问题。只是因为 2.3 版。主要原因是 2.3 有一个地理编码器的错误。最近我发现了。
【解决方案2】:

而不是

 this.getResources().getDrawable(R.drawable.icon);

使用

 ClassName.this.getResources().getDrawable(R.drawable.icon); 

ClassName 是您的活动名称

对于构造函数也可以这样做而不是

  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);

使用

  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,ClassName.this);

【讨论】:

  • 感谢您的快速回复亲爱的朋友,但是,它似乎不起作用。错误再次显示为:“构造函数 HelloItemizedOverlay 未定义”。
  • hmm HelloItemizedOverlay 的邮政编码...编辑您的问题并同时发布其代码
  • 这样做之后,我在该行中遇到另一个错误: List
    addresses = geocoder.getFromLocationName(mapSearchBox.getText().toString(),5);它说一个空指针异常。为此,我使用 try/catch 块进行了尝试,这会导致应用程序强制关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多