2015-04-20 20 views
5

Ho un'attività con la nuova barra degli strumenti. In questa barra degli strumenti ho solo una icona ... la mia icona SearchView. Quando clicco su quell'icona si apre un EditText nella barra degli strumenti e sono in grado di scrivere ciò che sto cercando. Il problema è che quando faccio clic sull'icona Cerca, il contenuto della mia attività (FrameLayout con frammento) viene ricaricato.Previene l'attività di ricarica quando si fa clic su SearchView

EDIT:

più: quando si clicca sull'icona, si ricarica l'attività e EditText aperta, dopo che il SearchResult attività si chiama, e se si preme il pulsante indietro in quell'attività torno alla MainActivity e la searchview è ancora aperto.

Come impedirlo?

thats il mio parte manifesto di ricerca (MainActivity ha l'icona):

<meta-data 
      android:name="android.app.default_searchable" 
      android:value=".activity.SearchResult_" /> 

     <activity 
      android:name=".activity.MainActivity_" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".activity.SearchResult_" 
      android:label="@string/title_activity_search_result" 
      android:screenOrientation="portrait" > 
      <meta-data 
       android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 

      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 
     </activity> 

thast mia onCreateOptionsMenu:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 

     MenuItem searchItem = menu.findItem(R.id.action_search); 

     SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE); 

     SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() 
     { 
      public boolean onQueryTextChange(String newText) 
      { 
       Log.d("Query", newText); 
       return true; 
      } 

      public boolean onQueryTextSubmit(String query) 
      { 
       Log.d("Search", query); 
       SearchResult_.intent(MainActivity.this).extra("query", query).start(); 
       return true; 
      } 
     }; 

     SearchView searchView = null; 
     if (searchItem != null) { 
      searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     } 
     if (searchView != null) { 
      searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName())); 
     } 

     return super.onCreateOptionsMenu(menu); 
    } 

risposta

0

Non potete. sfortunatamente tutti hanno lo stesso identico problema. searchViews chiama sempre la query quando viene aperta. nessun modo per evitarlo. Ho visto alcune persone che un booleano ha chiamato per primo e lo ha impostato su true. quindi fai la logica solo se è falsa. quindi alla prima chiamata di query impostalo su false. Non un buon modo, ma dovrebbe funzionare

+1

Ma per esempio ... whatsapp ha quasi la stessa funzionalità ma lo schermo non si ricarica. Forse mi sono sbagliato. SearchView si trova sulla barra degli strumenti MainActivity e MainActivity viene ricaricato. Dopo aver premuto l'icona di ricerca, viene chiamata la mia attività SearchResult. –

0

Non so se che si tratta di una cattiva pratica, ma posso risolvere il problema in questo modo:

@Override 
protected void onResume() { 
    super.onResume(); 

    if (searchView != null) { 
     if (searchView.getQuery().length() <= 0) { 
      searchView.setQuery("", false); 
     } 
    } 

} 
0

nel metodo onQueryTextSubmit fare: searchView.setQuery (query, false);

Problemi correlati