我正在尝试向我的应用程序添加地理编码搜索功能,其工作方式与 Google map 中的功能相同:
我已经使用 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/