2015-04-20 7 views
5

Mam aktywność z nowym paskiem narzędzi. Na tym pasku narzędzi mam tylko jedną ikonę ... moją ikonę SearchView. Kiedy klikam na tę ikonę, otwiera EditText na pasku narzędzi i jestem w stanie napisać, czego szukam. Problem polega na tym, że po kliknięciu ikony wyszukiwania zawartość mojej aktywności (FrameLayout z fragmentem) jest ponownie ładowana.Zapobieganie ponownemu ładowaniu aktywności po kliknięciu SearchView

EDIT:

Plus: gdy kliknięcie na ikonę, to przeładowuje aktywności i otwartą EditText, po tym wynik wyszukiwania Aktywność nazwie, a jeśli nacisnę przycisk wstecz w tej działalności i powrócić do główną działalność, a searchview jest wciąż otwarty.

Jak temu zapobiec?

Ów mój Manifest część wyszukiwania (główną działalność ma ikonę):

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

Odpowiedz

0

cant. niestety każdy ma dokładnie ten sam problem. searchViews zawsze wywołują zapytanie, gdy jest otwarte. nie sposób tego uniknąć. Widziałem, że niektórzy ludzie mają na początku nazwę boolowską i ustawili ją na true. wtedy logiczne, jeśli jest fałszywe. następnie przy pierwszym wywołaniu zapytania ustaw go na false. Nie jest to dobry sposób, ale to powinno działać

+1

Ale na przykład ... WhatsApp ma prawie taką samą funkcjonalność, ale ekran nie ładuje się ponownie. Może wyraziłem się źle. SearchView znajduje się na pasku narzędzi MainActivity, a MainActivity jest ponownie ładowany. Po naciśnięciu ikony wyszukiwania wywoływana jest moja aktywność SearchResult. –

0

Nie wiem, czy to jest to zła praktyka, ale ja go naprawić tak:

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

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

} 
0

W swojej metodzie onQueryTextSubmit zrobić: searchView.setQuery (query, false);

Powiązane problemy