2015-04-30 5 views
5

Sto sviluppando un'applicazione in cui searchview si trova nella barra delle azioni dell'attività principale. E nell'attività principale ci sono 3 frammenti. C'è un listview in ogni frammento. Il problema è che come posso ordinare l'elemento della lista dei frammenti quando searchview è implementato nella barra delle azioni di attività.Come implementare searchview in activity (barra di azione) quando listview esiste nel frammento

Sto usando un semplice adattatore per il cursore e listview con una riga personalizzata in cui ci sono textview e imageview.

enter image description here

Questo è il codice di SearchView nell'attività

SearchManager SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
    android.support.v7.widget.SearchView searchViewAction = (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchMenuItem); 
    searchViewAction.setSearchableInfo(SManager.getSearchableInfo(getComponentName())); 

    searchViewAction.setIconifiedByDefault(true); 

      android.support.v7.widget.SearchView.OnQueryTextListener textChangeListener = new android.support.v7.widget.SearchView.OnQueryTextListener() 
    { 
     @Override 
     public boolean onQueryTextChange(String newText) 
     { 
      // this is your adapter that will be filtered 
      adapter.getFilter().filter(newText); 
      System.out.println("on text chnge text: "+newText); 
      return true; 
     } 
     @Override 
     public boolean onQueryTextSubmit(String query) 
     { 
      // this is your adapter that will be filtered 
      adapter.getFilter().filter(query); 
      System.out.println("on query submit: "+query); 
      return true; 
     } 
    }; 
    searchViewAction.setOnQueryTextListener(textChangeListener); 

E il codice del frammento è

Cursor mCursor = getContacts(); 
getActivity().startManagingCursor(mCursor); 



c_adapter = new SimpleCursorAdapter(getActivity(), R.layout.contact_item, mCursor, 
     new String[]{ContactsContract.Contacts.DISPLAY_NAME 
       , ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts._ID}, 

     new int[]{R.id.username1, R.id.ivuserpicicon1}); 



    if (c_adapter.getCount() == 0) { 
     Toast.makeText(getActivity(), "No Items Available", Toast.LENGTH_SHORT).show(); 
    } 

    listview = (ListView) view.findViewById(R.id.listview); 
    listview.setAdapter(c_adapter); 
    listview.setTextFilterEnabled(true); 

Come posso implementare SearchView. Ho bisogno di una piccola guida.

+0

quello che hai provato finora. – Gattsu

+0

Se questo è l'aspetto dell'applicazione in questo momento, assicurati di utilizzare AppCompat e il target 22 in modo che gli utenti possano visualizzarlo (il più vicino possibile) in Material Design. –

+0

Sto affrontando lo stesso problema. Ho una vista di ricerca nell'attività principale e contiene un pager di visualizzazione che viene popolato attraverso Fragments usando FragmentStatePagerAdapter. La vista di Liste è contenuta nei frammenti. Devo filtrare la vista elenco di frammenti del scheda attiva utilizzando la visualizzazione Ricerca nell'attività principale. Hai risolto il problema? Per favore aiutami a risolvere il problema. –

risposta

2

L'attività di frammentazione della comunicazione è abbastanza semplice rispetto alla comunicazione da frammento a attività. È possibile controllare il seguente link per entrambi i tipi di comunicazione

http://developer.android.com/training/basics/fragments/communicating.html#Deliver

Nella vostra attività è possibile ottenere un'istanza del frammento che contiene il ListView e richiamare tutte le ricerche, ordinare le operazioni.

Supponendo di aver aggiunto

android:actionViewClass="android.widget.SearchView" 

per la voce di menu di ricerca nel file di layout del menu, nella onCreateOptionsMenu della vostra attività è possibile aggiungere

MenuItem searchItem = menu.findItem(R.id.your_search_menu_item); 
    SearchView actionSearchView = (SearchView) searchItem.getActionView(); 

    actionSearchView.setIconifiedByDefault(false); 
    actionSearchView.setOnQueryTextListener(//Set up your OnQueryTextListener here); 

Nel metodo onQueryTextChange del OnQueryTextListener , puoi invocare i tuoi metodi di frammenti per la ricerca e l'ordinamento.

+0

vedi la modifica ... –

Problemi correlati