0

ネイティブの Google マップで行われるように、カスタム マップ アプリケーションに検索機能を実装する必要があります (アクション バーが検索フィールドに変わり、クエリを記述できます)。これで、 Google geocoding apiの使用方法と、データから場所を取得する方法がわかりました。しかし、その変更可能なアクションバーを実装できませんでした。

私のアプリは次のようになります。

ここに画像の説明を入力

そして、検索ボタンを押した後、この種のレイアウトを表示したいと思います:

ここに画像の説明を入力

助けてくれてありがとう、うまくいけば私の問題を解決できます。

4

1 に答える 1

3

検索機能のコードを次に示します。このコードは私と一緒に動作します。場所の名前を入力すると、マップ上で正確に一致する場所にリダイレクトされます。次のコードは、名前による検索と LatLang による検索の 2 つの方法を提供します。

  1. 名前または場所で

    public void searchPlace()
    {       
    
        AlertDialog.Builder alert = new AlertDialog.Builder(this);
    
        alert.setTitle("Search Location");
        alert.setMessage("Enter Location Name: ");
    
        // Set an EditText view to get user input 
        final EditText input = new EditText(this);
        alert.setView(input);
    
        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          String value = input.getText().toString();
          // Do something with value!
          Log.d("value", value);
    
          Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());    
            try {
                List<Address> addresses = geoCoder.getFromLocationName(
                    value, 5);
                String add = "";
                if (addresses.size() > 0) {
                    p = new GeoPoint(
                            (int) (addresses.get(0).getLatitude() * 1E6), 
                            (int) (addresses.get(0).getLongitude() * 1E6));
                    mc.animateTo(p);    // create mapController object like `MapController mc = mapView.getController();`
                    mapView.invalidate();
                }    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
          }
        });
    
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton) {
            // Canceled.
          }
        });
    
        alert.show();
    
    }  
    
  2. LAtLangによる。

    public void byLatLang()
    {       
    
        LayoutInflater factory = LayoutInflater.from(this);            
        final View textEntryView = factory.inflate(R.layout.latlong, null);
    
        AlertDialog.Builder alert = new AlertDialog.Builder(this);
    
        alert.setTitle("Search Location");
        alert.setMessage("Enter Lattitude and Longitude: ");
    
        alert.setView(textEntryView); 
        // Set an EditText view to get user input
        AlertDialog latLongPrompt = alert.create();
    
        final EditText lat = (EditText) textEntryView.findViewById(R.id.lat);
        final EditText longi = (EditText) textEntryView.findViewById(R.id.longi);
    
        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()   {
        public void onClick(DialogInterface dialog, int whichButton) {
    
            Toast.makeText(getBaseContext(), "clicked ok ", Toast.LENGTH_SHORT).show();
          Double value1 = Double.parseDouble(lat.getText().toString());
          Double value2 = Double.parseDouble(longi.getText().toString());
          // Do something with value!
                      //Log.d("value1", value1);
              //Log.d("value2", value2);
    
          p = new GeoPoint(
                    (int) (value1 * 1E6), 
                    (int) (value2 * 1E6));
    
                mc.animateTo(p);
                mc.setZoom(17); 
                mapView.invalidate();
    
    
          }
        });
    
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton) {
            // Canceled.
          }
        });
    
        alert.show();
    
    }  
    
于 2012-10-26T06:56:03.630 に答える