Android fragments 使用ActionBar选项卡在ViewPager中的片段更改时重置SearchView

Android fragments 使用ActionBar选项卡在ViewPager中的片段更改时重置SearchView,android-fragments,searchview,Android Fragments,Searchview,我用ActionBar选项卡实现了两个片段。我用的是夏洛克碎片。当我启动一个片段时,我会在操作栏上创建一个searchview 问题是:当我在第一个片段上搜索某个内容时,如果不关闭searchview或删除文本,我会移动到下一个片段,我会得到一个折叠的searchview,这很好。但是,当我再次回到我的第一个片段时,我看到一个列表像以前一样排序,但是searchview被折叠了。返回原始列表的唯一方法是单击一次searchview并将其关闭 当我移动到第二个片段时,如何在第一个片段上重置sear

我用ActionBar选项卡实现了两个片段。我用的是夏洛克碎片。当我启动一个片段时,我会在操作栏上创建一个searchview

问题是:当我在第一个片段上搜索某个内容时,如果不关闭searchview或删除文本,我会移动到下一个片段,我会得到一个折叠的searchview,这很好。但是,当我再次回到我的第一个片段时,我看到一个列表像以前一样排序,但是searchview被折叠了。返回原始列表的唯一方法是单击一次searchview并将其关闭

当我移动到第二个片段时,如何在第一个片段上重置searchview,或者当我移动到第一个片段时如何保持searchview打开

任何一种解决方案都可以

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
 >

<item android:id="@+id/action_search"
    android:title="search"
    android:icon="@drawable/search"
    android:orderInCategory="100"
    android:showAsAction="always|collapseActionView"
    android:actionViewClass="com.actionbarsherlock.widget.SearchView" />

</menu>

对于那些仍在挠头、无法找到解决方案的人,这里介绍一下您是如何做到这一点的。这很简单:

在创建SearchView时,只需将ID分配给它(通过创建ids.xml并在那里保留ID,然后在运行时分配)。 现在,在主选项卡活动的onTabUnselected()方法中,识别searchview并使用函数setIconified(true)两次(一次删除文本,一次折叠searchview)


别忘了在searchview的onQueryTextChange方法中添加一个空查询字符串检查,这给我带来了一个问题。

Android为您提供了像
onCreate
onDestroy
这样的方法来处理活动以及菜单
OnCreateOptions菜单
OnDestroyOptions菜单
。您可以使用
OnDestroyOptions菜单
方法清除您的搜索视图或实现您的另一个想法

例如:

    @Override
    public void onDestroyOptionsMenu() {
       super.onDestroyOptionsMenu();

       if (searchView != null && 
          !searchView.getQuery().toString().isEmpty()) {

          searchView.setIconified(true);
          searchView.setIconified(true);
       }
    }

这对我很有效,祝你好运。

完美的解决方案。。!快速简单的解决方案!!惊人的答案。你救了我一天。
    @Override
    public void onDestroyOptionsMenu() {
       super.onDestroyOptionsMenu();

       if (searchView != null && 
          !searchView.getQuery().toString().isEmpty()) {

          searchView.setIconified(true);
          searchView.setIconified(true);
       }
    }