android - 在微调器中显示 ActionBar 搜索结果

标签 android android-actionbar geocoding

我正在尝试向我的应用程序添加地理编码搜索功能,其工作方式与 Google map 中的功能相同: An example search in Google Maps For Android

我已经使用 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);
        }
    }
};

所有这些都有效,并且我的 map 会在搜索时缩放到位置,但如何像 Google map 一样在搜索下显示搜索结果?

预先感谢您的任何回复, 安赫

最佳答案

您在 Spinner 这样的小部件中看到的只是建议。

您可以按照本指南获得此效果: http://www.grokkingandroid.com/android-tutorial-adding-suggestions-to-search/

或者在 Android 开发者指南上: http://developer.android.com/guide/topics/search/adding-custom-suggestions.html

关于android - 在微调器中显示 ActionBar 搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162706/

相关文章:

javascript - Android v3.3.0 variant.getMegrate() 已过时并替换为 variant.getMergeAssetsProvider()

geocoding - 对城市的区域名称进行地理编码以获取经度和经度

android - 地理编码器阻止我的 Android 应用程序

geocoding - 如何计算给定纬度/经度位置的边界框?

java - 如何使用gson序列化Pair的ArrayList

java - 从 Java 代码创建 AVD 设备。库或其他解决方案

android - 为什么我的应用程序崩溃调用 "setupActionBarWithNavController(navController, appBarConfiguration)"

android - AppCompat 操作栏样式

android - Android中刷新按钮的动画

java - onActivityResult(重新)调用