gpt4 book ai didi

android - 单击 SearchView 时防止 Activity 重新加载

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

我有一个新工具栏的 Activity 。在这个工具栏中我只有一个图标...我的 SearchView 图标。当我单击该图标时,它会在工具栏中打开一个 EditText,我可以写下我要查找的内容。问题是,当我单击“搜索”图标时,我的 Activity(带 fragment 的 FrameLayout)的内容被重新加载。

编辑:

另外:当点击图标时,它会重新加载 Activity 并打开 EditText,之后调用 Activity SearchResult,如果我在该 Activity 中按下后退按钮,我将返回到 MainActivity 并且搜索 View 仍然打开。

如何预防?

那是我的搜索 list 部分(MainActivity 有图标):

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

<activity
android:name=".activity.MainActivity_"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".activity.SearchResult_"
android:label="@string/title_activity_search_result"
android:screenOrientation="portrait" >
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />

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

我的 OnCreateOptionsMenu:

   @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);

MenuItem searchItem = menu.findItem(R.id.action_search);

SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);

SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener()
{
public boolean onQueryTextChange(String newText)
{
Log.d("Query", newText);
return true;
}

public boolean onQueryTextSubmit(String query)
{
Log.d("Search", query);
SearchResult_.intent(MainActivity.this).extra("query", query).start();
return true;
}
};

SearchView searchView = null;
if (searchItem != null) {
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
}

return super.onCreateOptionsMenu(menu);
}

最佳答案

我知道我来晚了,但这是正确的解决方案。 SearchView 默认行为的工作方式是它会自动将 ACTION.SEARCH Intent 发送到 list 中声明的​​可搜索 Activity 。发送后,它将创建该 Activity 的新实例,以便可以调用 onCreate() 方法并处理 Intent 。

要解决此问题,只需将可搜索 Activity 的启动模式声明为“SingleTop”即可。 android:launchMode="singleTop"

根据“singleTop”的 Android 文档( https://developer.android.com/guide/components/activities/tasks-and-back-stack ):“如果 Activity 的实例已经存在于当前任务的顶部,系统将通过调用其 onNewIntent() 方法将 Intent 路由到该实例,而不是创建 Activity 的新实例。”如果您将可搜索 Activity 声明为“singleTop”,请确保覆盖 onNewIntent() 并相应地处理 ACTION.SEARCH Intent 数据。

关于android - 单击 SearchView 时防止 Activity 重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757421/

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