当前位置: 首页 > 知识库问答 >
问题:

阻止在单击SearchView时重新加载活动

徐皓君
2023-03-14

我有一个使用新工具栏的活动。在这个工具栏中,我只有一个图标...我的搜索视图图标。当我单击该图标时,它会在工具栏中打开一个EditText,并且能够写下我想要的东西。问题是,当我单击“搜索”图标时,我的活动(带有片段的帧布局)的内容被重新加载。

编辑:

另外:当单击图标时,它会重新加载活动并打开EditText,然后调用activity SearchResult,如果我在该活动中按后退按钮,我会返回到MainActivity,搜索视图仍然打开。

如何防止这种情况?

这是我搜索的清单部分(Mainactive有图标):

<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);
    }

共有3个答案

万英武
2023-03-14

你不能。不幸的是,每个人都有同样的问题。搜索视图总是在打开查询时调用它。没有办法避免它。我见过有些人有一个布尔值叫first,并将其设置为true。如果它是假的,则只做逻辑。然后在第一次查询调用时将其设置为假。这不是一个好方法,但它应该有效。

秦博延
2023-03-14

在onQueryTextSubmit方法中,执行以下操作:searchView。setQuery(query,false)

戎洛华
2023-03-14

我知道我迟到了,但这里是适当的解决办法。SearchView默认行为的工作方式是自动发送ACTION。搜索清单中声明的可搜索活动的意图。发送后,它将创建该活动的新实例,以便可以调用onCreate()方法并处理意图。

为了解决这个问题,只需将可搜索活动的launchMode声明为“SingleTop”。< code > Android:launch mode = " single top "

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

 类似资料:
  • 问题内容: 旋转屏幕时,WebView会重新加载整个页面。我无法使用此功能,因为我的某些内容包含动态/随机材料。当前,屏幕旋转时会从loadUrl()方法重新加载原始URL。 知道我的代码有什么问题吗? MainActivity.java AndroidManifest.xml 问题答案: 我认为主要问题是您调用了web.loadUrl(webURL); 当saveInstanceState!=

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片

  • 问题内容: 我搜索了一堆页面,但是找不到我的问题,所以我不得不发表一个帖子。 我有一个带有提交按钮的表单,提交后我不希望它刷新或重定向。我只希望jQuery执行功能。 形式如下: 这是jQuery: 问题答案: 只需处理Submit事件中的表单提交,然后返回false: 您不再需要提交按钮上的onclick事件:

  • 我已经在我的应用程序上实现了推送通知,它们工作得很好。我遇到的问题是,当我点击下拉菜单中的它们时,它们会立即重新加载应用程序。为了解决这个问题,我让应用程序创建了一个新的活动实例。这现在打开了一个新的页面,但当点击从这个新的页面返回时,它有同样的问题,并重新加载整个应用程序。

  • 问题内容: 如何从浏览器的右键菜单中禁用“将视频另存为…”,以防止客户端下载视频? 是否有更完整的解决方案可以阻止客户端直接访问文件路径? 问题答案: 你不能 。这是因为这就是浏览器的目的:提供 内容 。但是, 您可以使其更难下载 。 首先,您可以禁用事件(也称为“右键单击”)。这样可以防止常规用户通过右键单击并另存为来公然翻录视频。但是随后他们可以禁用JS并解决此问题,或者通过浏览器的调试器找到

  • 当我点击listview项时,我试图启动一个活动。但是当我运行程序时,我得到了一些错误,比如: list_layout.xml