gpt4 book ai didi

android - SearchView 在一项 Activity 中,结果在另一项 Activity 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:08 26 4
gpt4 key购买 nike

我的用例如下:在 Activity A 中,我有一个带有可折叠 SearchView 的操作栏。当用户给出她的查询并按下“搜索”按钮时,我想显示 Activity B 和结果。我没有这样做,这是我的代码:

searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/action_search_hint"
android:label="@string/app_name"/>

Activity A:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

return true;
}

Activity A 和 B 的 AndroidManifest:

    <activity
android:name=".ActivityA">

<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

<activity android:name=".ActivityB">

<intent-filter>

<action android:name="android.intent.action.SEARCH"/>

</intent-filter>

<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>

</activity>

但是,无论我尝试什么,A 中的 getSearchableInfo 总是返回 null。

我觉得我不理解某些东西。使 getSearchableInfo() 返回不为 null 的唯一方法是将 SEARCH Intent 过滤器和可搜索元数据放入 list 中的 Activity A 中。但是,当我按下“搜索”按钮时, Activity A 的另一个实例会在当前 Activity 之上再次启动,这绝对不是我想要的。我想我可以将 singleTop 添加到 A 并在 onNewIntent 中处理 SEARCH 操作并启动 B,但我通常不希望 A 是 singleTop,我想要默认值。还是我?

我尝试将此添加到 list 中的 A(如其他一些线程中所建议的):

    <meta-data
android:name="android.app.default_searchable"
android:value=".ActivityB" >
</meta-data>

我做错了什么?

编辑:我将 A 中的“getComponentName()”行替换为以下内容:

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, ActivityB.class)));

它似乎按照我想要的方式工作!我在这里做错了什么,或者这是正确的方法吗?我有点不确定,因为在任何地方都没有提到它!

最佳答案

根据 Android documentations , SearchManager.getSearchableInfo(componentName) 接受一个参数,即:

componentName: The activity to get searchable information for

在您的情况下,您需要 ActivityB,因此构建一个 ComponentName指向 ActivityB 的方法是正确的

new ComponentName(this, ActivityB.class)

关于android - SearchView 在一项 Activity 中,结果在另一项 Activity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com