0

我試圖在獨立的Toolbar中實現SearchView,但無法獲得任何結果。無法使用在獨立工具欄中實現的SearchView進行搜索

我跟着這個答案SearchView at a secondary Toolbar但沒有成功。

這是我實現

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_tab_fragment3, container, false); 
     initViews(rootView); 
     initBottomToolbar(rootView); 
     return rootView; 
    } 

    private void initBottomToolbar(View rootView) { 
     mToolbarBottom = (Toolbar) rootView.findViewById(R.id.toolbar_bottom); 
     // Set an OnMenuItemClickListener to handle menu item clicks 
     mToolbarBottom.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem menuItem) { 
       // Handle the menu item 
       Toast.makeText(getActivity(), "action_search clicked", Toast.LENGTH_SHORT).show(); 

       SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); 
       SearchView searchView = null; 

       if (menuItem != null) { 
        Log.d("Bottom Toolbar", "menuItem != null"); 
        searchView = (SearchView) menuItem.getActionView(); 
       } 

       if (searchView != null) { 
        Log.d("Bottom Toolbar", "searchView != null"); 
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); 

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
         @Override 
         public boolean onQueryTextSubmit(String query) { 
          Toast.makeText(getActivity(), query, Toast.LENGTH_SHORT).show(); 
          Log.e("Bottom Toolbar", "Submitted: "+query); 
          return false; 
         } 

         @Override 
         public boolean onQueryTextChange(String newQuery) { 
          Toast.makeText(getActivity(), newQuery, Toast.LENGTH_SHORT).show(); 
          Log.d("Bottom Toolbar", "Changed: " + newQuery); 
          List<ContactsBean> filteredContactsBeanList = filter(mContactsBeanList, newQuery); 
          mContactsAdapter.animateTo(filteredContactsBeanList); 
          mContactsRecyclerView.scrollToPosition(0); 
          return true; 
         } 
        }); 
       } 
       return true; 
      } 
     }); 

     // Inflate a menu to be displayed in the toolbar 
     mToolbarBottom.inflateMenu(R.menu.menu_bottom_toolbar); 

    } 

甚至,如果我點擊SearchView,它既不顯示Toast也不顯示登錄的任何消息。

+0

http://v4all123.blogspot.in/2015/08/simple-example-for-using-searchview-工作in.html可能會對你有幫助。 – Gunaseelan

+0

@Gunaseelan這是用於主要工具欄。我有2個工具欄,一個在活動中,另一個在片段中。 – ch3tanz

回答

0

我把它通過虛報我toolbarBottom第一菜單之前,結合聽衆

toolbarBottom.inflateMenu(R.menu.menu_contacts_bottom); 
    if(toolbarBottom.getMenu().size() > 0){ 
     SearchManager searchManager = (SearchManager) getActivity().getSystemService(
      Context.SEARCH_SERVICE); 
     MenuItem searchMenuItem = toolbarBottom.getMenu().getItem(toolbarBottom.getMenu().size()-2); 
     mSearchView = (SearchView) searchMenuItem.getActionView(); 
     if (mSearchView != null) { 
      mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); 
     } 

     mSearchView.setOnCloseListener(new OnCloseListener() { 
      @Override 
      public boolean onClose() { 
       Log.d(TAG, "onClose"); 
       return false; 
      } 
     }); 

     mSearchView.setOnQueryTextListener(new OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       Log.d(TAG, "query: " + newText); 
       return false; 
      } 
     }); 
    }