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

时间:2015-03-19 12:39:36

标签: android-fragments searchview

我已经使用ActionBar标签实现了两个片段。我正在使用Sherlock碎片。当我开始片段时,我在操作栏上创建了一个搜索视图。

问题是:当我在第一个片段上搜索某些内容而没有关闭搜索视图或删除文本时,我移动到下一个片段,我得到一个折叠的搜索视图,这很好。但是当我再次回到我的第一个片段时,我看到一个像以前一样排序但是搜索视图被折叠的列表。取回原始列表的唯一方法是单击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 个答案:

答案 0 :(得分:4)

对于仍在摸不着头脑但无法找到解决方案的人,请按照以下方式进行操作。这很简单:

在创建搜索视图时,只需为搜索视图分配一个ID(通过创建ids.xml并在那里保留id并在运行时分配它)。 现在在主标签活动的onTabUnselected()方法中,识别搜索视图并使用函数setIconified(true)两次(一个用于删除文本,另一个用于折叠搜索视图)。

不要忘记在searchview的onQueryTextChange方法中添加对空查询字符串的检查,这对我来说是个问题。

答案 1 :(得分:4)

Android为您提供onCreateonDestroy等方法来处理活动以及菜单onCreateOptionsMenuonDestoryOptionsMenu。您可以使用onDestroyOptionsMenu方法清除SearchView或实现其他想法。

例如:

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

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

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

它适合我,祝你好运。