【问题标题】:Reset the SearchView on fragment change in ViewPager with ActionBar tabs使用 ActionBar 选项卡在 ViewPager 中重置片段更改时的 SearchView
【发布时间】:2015-03-19 12:39:36
【问题描述】:

我已经使用 ActionBar 选项卡实现了两个片段。我正在使用夏洛克碎片。当我开始一个片段时,我会在操作栏上创建一个搜索视图。

问题是:当我在第一个片段上搜索某些内容并且没有关闭搜索视图或删除文本时,我移动到下一个片段,我得到一个折叠的搜索视图,这很好。但是当我再次回到我的第一个片段时,我看到一个像以前一样排序的列表,但搜索视图已折叠。恢复原始列表的唯一方法是单击一次搜索视图并关闭它。

当我移动到第二个片段时如何重置第一个片段上的搜索视图,或者当我来到第一个片段时如何保持搜索视图打开?

任何一种解决方案都可以。

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

【问题讨论】:

    标签: android-fragments searchview


    【解决方案1】:

    对于那些仍然摸不着头脑并且无法找到解决方案的人,这里是你如何做到的。很简单:

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

    不要忘记在搜索视图的 onQueryTextChange 方法中添加对空查询字符串的检查,这给我带来了问题。

    【讨论】:

    • 快速简单的解决方案!!
    • 惊人的答案。你拯救了我的一天。
    【解决方案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);
           }
        }
    

    它对我有用,祝你好运。

    【讨论】:

    • 完美解决方案..!
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多