2013-10-18 25 views
7

L'attività di ricerca non viene avviata quando si preme enter. La vista di ricerca viene mostrata correttamente sulla barra delle azioni. Ma quando si digita la query di ricerca e premere InvioL'attività di ricerca non viene avviata quando si preme invio

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.punit.rateit" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 

    > 
    <activity 
     android:name="com.punit.rateit.MainActivity" 
     android:label="@string/app_name" > 

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

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:theme="@style/Theme.AppCompat.Light" 
       android:name=".SearchPageActivity"> 
      <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity" /> 
     <intent-filter> 
     <action android:name="android.intent.action.SearchPage" /> 
     </intent-filter> 
    </activity> 

    <activity android:name="com.punit.rateit.SearchResultsActivity" android:launchMode="singleTop" > 
    <intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
    <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable"/> 
    </intent-filter> 
    </activity>  

    </application> 

</manifest> 

Ecco l'Menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:com.punit.rateit="http://schemas.android.com/apk/res-auto" > 
<!-- Search, should appear as action button --> 
<item android:id="@+id/search" 
     android:icon="@drawable/ic_search" 
     android:title="@string/action_search" 
     com.punit.rateit:actionViewClass="android.widget.SearchView" 
     com.punit.rateit:showAsAction="ifRoom" 

     /> 

    </menu> 

L'attività che mostra barra delle operazioni.

 public boolean onCreateOptionsMenu(Menu menu) { 

    MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu,menu); 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView = 
       (SearchView) menu.findItem(R.id.search).getActionView(); 

     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
     searchView.setSubmitButtonEnabled (true); 
    return super.onCreateOptionsMenu(menu); 
} 

L'attività SearchResult che dovrebbe essere l'attività chiamato quando la ricerca pulsante di invio viene premuto

public class SearchResultsActivity extends Activity { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("search", "search triggered"); 
    setContentView(R.layout.searchpage); 

    handleIntent(getIntent()); 
} 
@Override 
protected void onNewIntent(Intent intent) { 
    Log.d("search", "search triggered"); 
    setIntent(intent); 
    handleIntent(intent); 
} 
private void handleIntent(Intent intent) 
{ 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      Log.d("search", query); 
} 
    } 

@Override 
public boolean onSearchRequested() { 

    Log.d("search", "search triggered"); 

    return false; // don't go ahead and show the search box 
} 

risposta

4

risolto il problema. Il tag era necessario per l'applicazione. Rimuoverlo dall'attività e metterlo sotto applicazione ha fatto il trucco.

Ecco l'ultima tag applicazione manifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    > 
    <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity"/> 
    <activity 
     android:name="com.punit.rateit.MainActivity" 
     android:label="@string/app_name" > 
     <meta-data android:name="android.app.default_searchable"   
      android:value="com.punit.rateit.SearchResultsActivity" /> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+1

Questo non sembra funzionare. Esistono due tag meta-dati in conflitto con gli stessi valori di nome. – John61590

+2

Controlla questo: http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work U deve delacre meta tag sia nell'attività principale (dove si posiziona il widget di ricerca e in l'attività di ricerca) –

+3

La documentazione racconta storie diverse. Per dichiarare l'attività di ricerca per la finestra di ricerca di un'attività, aggiungere un elemento all'interno dell'elemento dell'attività corrispondente.L'elemento deve includere l'attributo android: value che specifica il nome della classe dell'attività ricercabile e l'attributo android: name con un valore di "android.app.default_searchable". – Pankaj

1

Ho avuto lo stesso problema, e la mia ricerca di una risposta mi ha portato qui, ecco cosa ha funzionato per me ...

Assicurati che il file searchables.xml si trova nella posizione corretta (vale a dire, nella cartella res/xml/) e che lo stesso file non contiene errori - altrimenti vi accorgerete che (SearchManager)getSystemService(Context.SEARCH_SERVICE).getSearchableInfo(componentName) 0.123.restituirà null, interrompendo la funzionalità di ricerca.

(Inoltre, si assicuri di impostare componentName nel modo appropriato, perché l'esempio mostrato nella guida Android è solo quando si stanno facendo ricerche e visualizzare le ricerche nella stessa attività.)

. ..am condivisione nella speranza che possa salvare qualcun altro di 4 ore sprecate! :/

+0

Ho sprecato tre giorni, oggi è il quarto giorno. Puoi esaminare la mia domanda [qui] (http://stackoverflow.com/questions/27567796/android- ricerca assistita-il-tasto-ricerca-non-invoca-i-attivabili ricercabili)? Potrebbe essere possibile individuare il problema? – Solace

0

Non stavo usando le stringhe all'interno di searchable.xml.

È NECESSARIO impostarlo in questo modo o si otterrà nulla. Ho appena inserito testo invece di usare @string.

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_label" 
    android:hint="@string/search_hint" > 
</searchable> 
Problemi correlati