在带有ActionBar选项卡的ViewPager中更换Fragment时重置SearchView

4
我已经使用ActionBar选项卡实现了两个片段,我正在使用Sherlock片段。当我启动一个片段时,在操作栏上创建一个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>

这是我在片段中膨胀的方法。
   @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
        {
        super.onCreateOptionsMenu(menu, inflater);

        inflater.inflate(R.menu.main, menu);
        SearchView sv = (SearchView)getActivity().findViewById(R.id.action_search);
          sv.setOnQueryTextListener(new OnQueryTextListener() {
              @Override
              public boolean onQueryTextSubmit(String query) {
                  //...
                  return false;
              }
              @Override
              public boolean onQueryTextChange(String newText) {
                  bindingData.resetData();


                  bindingData.getFilter().filter(newText.toString());
                  return false;
              }
          });
    }
2个回答

5
对于那些仍在苦思冥想无法找到解决方案的人,这里是如何做到的。它非常简单:
在创建搜索视图时为其分配一个ID(通过创建ids.xml并在其中保留ID并在运行时分配)。
现在,在主选项卡活动的onTabUnselected()方法中,识别搜索视图并使用函数setIconified(true)两次(一次用于删除文本,一次用于折叠搜索视图)。
不要忘记在searchview的onQueryTextChange方法中添加对null查询字符串的检查,这给我带来了问题。

快速简单的解决方案!! - Shruti
惊人的答案。你救了我的一天。 - Satyam Gondhale

5

Android提供了一些方法,例如onCreateonDestroy用于处理活动,以及onCreateOptionsMenuonDestoryOptionsMenu用于处理菜单。您可以使用onDestroyOptionsMenu方法来清除您的SearchView或实现其他想法。

例如:

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

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

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

对我来说有效,祝你好运。


完美的解决方案..! - Krupa Kakkad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接