Android onSearchRequested()帮助,将搜索查询传递回地图活动

时间:2011-11-10 17:58:21

标签: android search android-activity map

我在一个相当复杂的布局中有一个Map活动。因此,我不能简单地在该活动中使用地图的搜索功能进行简单搜索而不会造成错误的窗口(并且崩溃应用程序,我需要onSearchRequested使用不同的上下文,但它不接受参数。)

我所做的是在地图活动上方另一个透明的弹出式活动,在onSearchRequested()期间立即调用onCreate()

事实上,当我输入内容并点击搜索时,没有任何反应。搜索栏只会自行清除,但会停留在屏幕上,就像提示我再次搜索某些内容一样。我不知道这个搜索查询会发生什么,但我需要将它传递给我的MapActivity。

我正在考虑做startActivityforResult并从搜索弹出活动中传回结果,但我仍然面临着不知道如何存储结果以及点击搜索后搜索消失的困境

这个类会加载一个搜索框,就是全部。它还在搜索框和键盘之间的空间中具有透明的图像视图。如果用户点击该处,则活动已完成()

public class PseudoMapSearchActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pseudomapsearch);

    onSearchRequested();

    findViewById(R.id.blankness).setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            finish();
        }

    });

    final SearchManager searchManager =
            (SearchManager) getSystemService(this.SEARCH_SERVICE);

    searchManager.setOnCancelListener(new SearchManager.OnCancelListener() {
          public void onCancel() {
              searchManager.setOnCancelListener(null);
              searchManager.stopSearch();
              finish();
          }
      });

    searchManager.setOnDismissListener(new SearchManager.OnDismissListener() {
          public void onDismiss() {
              searchManager.setOnCancelListener(null);
              searchManager.stopSearch();
              finish();
          }
      });

    //searchManager.getSearchableInfo(getCallingActivity());

    //searchManager.triggerSearch(query, launchActivity, appSearchData)

}

我应该调用哪个searchManager函数来获取用户输入和选择的搜索查询

    <activity android:name=".PseudoMapSearchActivity" android:theme="@style/Theme.Transparent" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">
        <meta-data android:name="android.app.default_searchable"
            android:value=".PseudoMapSearchActivity" />
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

由于Pseudomapsearch弹出活动不会进行实际搜索,而我对地图的活动将对该位置数据进行所有实际处理,我是否应该以某种方式更改清单?

1 个答案:

答案 0 :(得分:2)

您可以将结果从startActivityForResult存储在Android SharedPreferences对象中。 SharedPreferences非常棒,可以从应用程序的任何地方获得,甚至可以从全局获取。如果你没有,那么有一个类来存储SharedPreferences的常量是个好主意。 SharedPreferences的文档很棒。这是链接:

  

http://developer.android.com/reference/android/content/SharedPreferences.html

希望这有帮助!

至于从结果中获取数据,您需要使用名为onActivityResult的方法。然后使用适当的请求代码。 上述方法的文档可以在这里找到:

  

http://developer.android.com/reference/android/app/Activity.html