2015-03-19 238 views
4

我已经使用ActionBar选项卡实现了两个片段。我正在使用Sherlock碎片。当我开始一个片段时,我在操作栏上创建一个搜索视图。使用ActionBar选项卡重置ViewPager片段更改上的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; 
       } 
      }); 
    } 

回答

3

对于那些谁仍然摸不着头脑和膨胀不能够找到一个解决方案,在这里,你是怎么做到的。这很简单:

只需在创建它时通过为您的searchviews分配一个ID(通过创建ids.xml并在其中保留id并在运行时分配它)。 现在,在主选项卡活动的onTabUnselected()方法中,确定searchviews并使用函数setIconified(true)两次(一次删除文本,一次删除搜索视图)。

不要忘记在您的searchview的onQueryTextChange方法中为空查询字符串添加一个检查,它为我创建了一个问题。

+0

快速简单的解决方案! – Shruti 2018-02-24 06:36:58

2

Android为您提供了像onCreateonDestroy这样的方法来处理活动,同样也可以用于菜单onCreateOptionsMenuonDestoryOptionsMenu。您可以使用onDestroyOptionsMenu方法来清除您的SearchView或实现您的另一个想法。

例如:

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

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

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

它为我,好运气。

+0

完美的解决方案..! – 2018-01-30 10:12:55

相关问题