【问题标题】:Getting Result from Activity Started with SearchManager从 SearchManager 开始的 Activity 获取结果
【发布时间】:2013-07-17 22:10:16
【问题描述】:

我正在关注此relatively simple tutorial,了解如何手动启动SearchableActivity,以便我可以从中获取result

他基本上是将base Activity(Activity A)设置为可搜索的Activity(在清单中),以便它接收搜索意图,然后手动启动真正的搜索Activity (活动 B)startActivityForResult

修改清单后,他只有一个代码块。我的问题:

你把这段代码放在哪里?

private void handleIntent(Intent intent) {
   // Get the intent, verify the action and get the query
   if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
     String query = intent.getStringExtra(SearchManager.QUERY);
     // manually launch the real search activity
     final Intent searchIntent = new Intent(getApplicationContext(),
           MySearchActivity.class);
     // add query to the Intent Extras
     searchIntent.putExtra(SearchManager.QUERY, query);
     startActivityForResult(searchIntent, ACTIVITY_REQUEST_CODE);
   }

Activity A 还是 B?你怎么称呼它?

额外信息 - 我目前的表现如何 - 这会被删掉吗?

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    setupNewSearchView(searchItem, searchManager);
}

return true;

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupNewSearchView(final MenuItem searchItem, SearchManager searchManager) {
    android.widget.SearchView searchView = (android.widget.SearchView) searchItem.getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);

}

【问题讨论】:

    标签: android android-intent android-activity android-searchmanager


    【解决方案1】:

    首先在 manifest.xml 中制作 Activity(A) singleInstance/singleTop android:launchMode="singleInstance|singleTop"
    然后使用 Activity(A) 中的onNewIntent(Intent intent) 来处理Intent(intent)

    编辑:
    ActivityA.java

    @Override
    protected void onNewIntent(Intent intent) {
        handleIntent(intent);
    }
    

    请阅读此tutorial 以全面了解正在发生的事情

    【讨论】:

    • 我不确定我是否遵循。 onNewIntent() 在哪里被调用?我假设在Activity A. 但是在哪里? ActivityA 什么时候开始(onCreate)?或者SearchManager 通常在哪里被调用?
    • 当您搜索时(在 searchView 中写入文本并按下键盘上的搜索按钮后)Android 系统将启动 Activity(A) 的新实例(带有搜索意图的新 Activity(A) action),但是因为我们使用了“singleInstance”,所以 Activity(A) 上的 onNewIntent 函数将使用搜索操作意图调用
    • 再次感谢您的所有帮助。我明白你在说什么。但仍不清楚“在哪里”。您说“它将以搜索操作意图调用”。现在,我在onCreateOptionsMenu 中处理这个(我相信)。在需要更改之前,我已将上面的代码添加到我如何执行此操作中。我需要在哪里调用它吗? (然后删除我已经做过的事情?)
    • 谢谢,我知道了。我明白发生了什么。我只是没有将查询传递给SearchableActivity
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多