2012-08-08 18 views
6

Sto cercando di attuare una ricerca relativa alla mia domanda Android utilizzando una ricerca barra dei widget nella barra delle operazioni.Search widget di bar non iniziare l'attività ricercabile

Seguo

http://developer.android.com/guide/topics/search/search-dialog.html http://developer.android.com/guide/topics/ui/actionbar.html#ActionView

tutorial per ottenere questo fatto.

ho due attività coinvolte nella ricerca. L'attività di SearchBar ha la barra delle azioni e AcceptSearch è la mia attività di ricerca. Anche se ho dichiarato quale attività era l'attività di ricerca, la query non viene inviata a AcceptSearch e l'attività non viene avviata.

ho configurato la barra di ricerca in modo tale che una barra di ricerca suggerimento appare quando il widget è vuota, ma il suggerimento non appare neanche. Ecco il mio codice.

SearchBar

public class SearchBar extends Activity 
{ 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.search_bar); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    //Inflate the options menu from XML 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false);   
    return true;   
} 

AcceptSearch

public class AcceptSearch extends ListActivity 
{ 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{  
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash_screen); 

    //Get the intent, verify the action and get the query 
    Intent intent = getIntent(); 
    if(Intent.ACTION_SEARCH.equals(intent.getAction())) 
    { 
     String query = intent.getStringExtra(SearchManager.QUERY); 

     //Start the search 
     doMySearch(); 
    } 
} 

Searchable.xml

<?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> 

options_menu

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
<item 
    android:title="Help" 
    android:id="@+id/menu_help" 
    android:showAsAction="always" 
/> 
<item 
    android:title="Categories" 
    android:id="@+id/menu_cats" 
    android:showAsAction="always" 
/> 
<item 
    android:id="@+id/menu_search" 
    android:title="Search with Searchlet" 
    android:icon="@drawable/ic_action_search" 
    android:showAsAction="ifRoom|collapseActionView" 
    android:actionViewClass="android.widget.SearchView"/> 
</menu> 

manifesto

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.searchlet" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="15" /> 

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

    <activity 
     android:name=".SplashScreenActivity" 
     android:label="@string/title_activity_splash_screen" 
     android:screenOrientation="portrait" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".AcceptSearch"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
      android:resource="@xml/searchable"/> 
    </activity> 

    <activity android:name=".SearchBar" 
       android:label="@string/app_name">     
     <intent-filter> 
      <action android:name="com.example.searchlet.CLEARSCREEN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 

     </intent-filter> 
    </activity> 

</application> 

</manifest> 

ho credere questo è tutte le informazioni necessarie per ricreare la situazione.

Grazie a tutti in anticipo. Lo apprezzo

+0

hanno u ha ottenuto il soluzione di questo problema? se sì per favore fammi sapere che mi sono anche bloccato qui. –

+0

@Lalit Hai trovato la soluzione? Sono anche bloccato qui. – Solace

risposta

7

Ho avuto un problema simile. Stavo seguendo grokking's tutorial e l'attività non è mai stata aperta. Ho provato le soluzioni di Indrek che io lavoro per me.

Si dovrebbe essere sicuri di avere i meta-dati corretti sotto il genitore destra. I meta-dati

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

devono essere applicati. I seguenti metadati

<meta-data 
    android:name="android.app.searchable" 
    android:resource="@xml/searchable" /> 

devono essere nel parametro di attività di ricerca all'interno di AndroidManifest.xml.

Nell'attività di ricerca ho fatto ciò che viene detto nel tutorial collegato in precedenza per la gestione dello stack di attività. Spero che questa soluzione funzioni per tutti con lo stesso problema.

18

Le esercitazioni sembra mancare una parte importante. Devi aggiungere <meta-data android:name="android.app.default_searchable" android:value=".MySearchActivityName" /> all'interno dei tag <application>.

+0

Grazie, proverò questa soluzione al mattino. (Sry per risposta tardiva) – myselfesteem

+1

Sì, quella non era la risposta su quello :( – myselfesteem

+0

Grazie, questo mi ha aiutato. –

1

Mancano metadati in ".SearchBar" Attività del file manifest, che indirizza a '.Attività di AcceptSearch.

Add seguenti metadati all'attività '.SearchBar':

<!-- search widget target activity--> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".AcceptSearch" /> 

Qui si aggiorna il codice per l'attività '.SearchBar' manifesto.

<activity android:name=".SearchBar" 
       android:label="@string/app_name"> 
     <!-- search widget target activity--> 
     <meta-data android:name="android.app.default_searchable" 
       android:value=".AcceptSearch" /> 
     <intent-filter> 
      <action android:name="com.example.searchlet.CLEARSCREEN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
2

Pau Arlandis Martinez, grazie. La tua soluzione funziona bene e il tutorial con lo stack delle attività è utile. Ho messo in <application> sezione questa meta-dati:

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

E ho notato che il metodo @Override onQueryTextSubmit deve restituire false per iniziare l'attività ricercabile. Altrimenti searchButton sulla tastiera virtuale non funziona.

+0

Ehi, dal momento che questa non è una risposta alla domanda originale, sarebbe stato grandioso se tu inserissi questo come commento alla risposta a cui ti riferisci, per rendere le cose più chiare. – ChristianM

0

Suggerimento e etichetta nel searchable.xml sono riferimenti e stringhe non codificate.

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
     android:hint="@string/search_hint" 
     android:label="@string/app_name"/> 

questo come l'attività che contiene il widget SearchView dovrebbe essere dichiarato nel manifesto

<activity 
    android:name="ACTIVITY PATH WHICH CONTAINS SEARCHVIEW WIDGET"> 

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

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

</activity> 

Dichiarazione per l'attività ricercabile nel manifesto.

<activity android:name=".SearchableActivity"> 

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

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

</activity> 
0

stavo avendo problemi con il SearchView non lancio del SearchActivity, si è rivelato essere un problema di package/directory.

Se il SearchableActivity non si trova nella stessa directory del Activity ospita il SearchView, è necessario cambiare:

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

a

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchableActivity.class))); 
Problemi correlati