2

Googleマップと同じように機能するジオコード検索機能をアプリケーションに追加しようとしています。 Android用Googleマップでの検索例

ActionViewを使用してアクションバーに検索を実装しました。アクションバーにアイテムを追加しました。

<item
    android:id="@+id/menu_Search"
    android:icon="@drawable/ic_action_search"
    android:orderInCategory="97"
    android:showAsAction="always|collapseActionView"
    android:title="Search"
    android:actionViewClass="android.widget.SearchView"/>

そして、onCreateOptionsMenuでどのように管理するかを定義しました。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    SearchView avSearch = (SearchView) menu.findItem(R.id.menu_Search).getActionView();

    avSearch.setIconifiedByDefault(true);

    avSearch.setOnQueryTextListener(new OnQueryTextListener() {
        int changes = 0;

        @Override
        public boolean onQueryTextChange(String s) {

            if (changes >= 4 || s.endsWith(" ")) {
                submitLocationQuery(s);
                changes = 0;
            } else
                ++changes;
            return true;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            submitLocationQuery(query);
            return true;
        }

    });

    return true;
}

検索は、バックグラウンドスレッドによってジオコーダーに送られます。

private void submitLocationQuery(final String query) {
    Thread thrd = new Thread() {
        public void run() {

            try {

                foundAddresses = mGeoCoder.getFromLocationName(query, 5);
                gcCallbackHandler.sendEmptyMessage(0);
            } catch (IOException e) {
                Log.e(this.getClass().getName(), "Failed to connect to geocoder service", e);
            }
        }
    };
    thrd.start();
}

そして、ハンドラーによって受信および処理されます。

private Handler gcCallbackHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (foundAddresses != null && !foundAddresses.isEmpty()) {
            GeoPoint foundGeo = new GeoPoint((int) (foundAddresses.get(0).getLatitude() * 1E6), (int) (foundAddresses.get(0).getLongitude() * 1E6));
            mapView.getController().animateTo(foundGeo);
        }
    }
};

これらはすべて機能し、検索時に地図が場所にズームしますが、Googleマップのように検索結果を検索結果に表示するにはどうすればよいですか?

返信ありがとうございます、ANkh

4

1 に答える 1