0

我已經使用recyclerview實現了searchView。看起來很好,但有時(完全隨機)不要在設備或工具欄中的按下按鈕之後刪除搜索視圖,並且這仍然與主屏幕疊加。Searchview在執行搜索後不會刪除recyclerview的視圖

我附截圖看到的行爲

enter image description here

一些幫助將是aprreciate!

這是我在搜索查看代碼:

@Override 
    public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu_search, menu); 
     MenuItem item = menu.findItem(R.id.action_search); 
     final SearchView sv = new SearchView(((MainActivity) getActivity()).getSupportActionBar().getThemedContext()); 
     MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); 
     MenuItemCompat.setActionView(item, sv); 

     sv.setQueryHint(getString(R.string.type_search)); 
     sv.setIconifiedByDefault(false); 
     sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       cursorFilter = !TextUtils.isEmpty(newText) ? newText : null; 
       getLoaderManager().restartLoader(0, null, AllContacts.this); 
       return false; 
      } 
     }); 
    super.onCreateOptionsMenu(menu,inflater); 
    } 

這是我做的光標搜索:你必須創建一個包含的結果新的POJO類

@Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     if (cursorFilter != null) { 
      baseUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, Uri.encode(cursorFilter)); 
     } else { 
      baseUri = ContactsContract.Contacts.CONTENT_URI; 
     } 

     String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " != 0))"; 
     return new CursorLoader(getActivity(), baseUri, PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
    } 

回答

0

在onQueryTextChange中搜索和適配器對象。並將搜索結果作爲參數傳遞給適配器。

+0

嗨,你能爲我提供的如何做到這一點一些代碼,請。我在android –

+0

中的新東西是沒有辦法清理屏幕之前,在這裏做一個新的搜索?如果(cursorFilter!= null){baselri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,Uri.encode(cursorFilter)); } else { baseUri = ContactsContract.Contacts.CONTENT_URI; } –

+0

您可以在將結果添加到列表之前清除列表 –

0

您可以參考此代碼

search = (SearchView) findViewById(R.id.search); 

    search.requestFocus(); 

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

     @Override 
     public boolean onQueryTextChange(String newText) { 
      serachEventList.clear(); 
      if(newText.equals("")) 
      { 
       eventsAdapter = new EventsAdapter(eventsArrayList,EventScreen.this); 
       list_events.setLayoutManager(new LinearLayoutManager(EventScreen.this)); 
       list_events.setAdapter(eventsAdapter); 
      } 

      else 
      { 
       for(int i=0; i<eventsArrayList.size();i++) 
       { 
        if(eventsArrayList.get(i).getEventname().trim().toLowerCase().startsWith(newText.toLowerCase().toString().trim()) || eventsArrayList.get(i).getTime().trim().toLowerCase().startsWith(newText.toLowerCase().toString().trim()) || eventsArrayList.get(i).getDay().trim().toLowerCase().startsWith(newText.toLowerCase().toString().trim()) || eventsArrayList.get(i).getLecturer().trim().toLowerCase().startsWith(newText.toLowerCase().toString().trim()) || eventsArrayList.get(i).getDescription().trim().toLowerCase().startsWith(newText.toLowerCase().toString().trim())) 
        { 
         serachEventList.add(eventsArrayList.get(i)); 
        } 
       } 

       eventsAdapter = new EventsAdapter(serachEventList,EventScreen.this); 
       list_events.setLayoutManager(new LinearLayoutManager(EventScreen.this)); 
       list_events.setAdapter(eventsAdapter); 
      } 


      return true; 
     } 
    });