2012-03-14 4 views
7

Ciao sto usando Android 3.0 widget di ricerca (non la modalità di ricerca), il problema è che ho bisogno di passare alcuni parametri con la parola di ricerca.pacchetto di passaggi Android con ricerca

Android non sta chiamando uno di questi

searchManager.setOnDismissListener(new OnDismissListener() { 

      @Override 
      public void onDismiss() { 
       // TODO Auto-generated method stub 
       Log.v(MyApp.TAG, "on dismiss search"); 

      } 
     }); 

     searchManager.setOnCancelListener(new OnCancelListener() { 

      @Override 
      public void onCancel() { 
       // TODO Auto-generated method stub 
       Log.v(MyApp.TAG, "on dismiss cancel"); 

      } 
     }); 

@Override 
    public boolean onSearchRequested() { 
     Bundle appData = new Bundle(); 
     appData.putLong("listino_id", this.listino_id); 
     this.startSearch(null, true, appData, false); 
     return true; 
     // return super.onSearchRequested(); 
    } 

ho bisogno della mia attività alla NON essere singleOnTop, ecco la mia AndroidManifest.xml

<activity android:name=".activity.ListinoProdottiActivity" android:windowSoftInputMode="stateHidden"> 


      <!-- Receives the search request. --> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
       <!-- No category needed, because the Intent will specify this class component--> 
      </intent-filter> 

        <!-- enable the base activity to send searches to itself --> 
      <meta-data android:name="android.app.default_searchable" 
       android:value=".activity.ListinoProdottiActivity" /> 


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

     </activity> 

ecco la mia searchable.xml

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    /> 
+0

Quando non si passa il parametro in più fa funziona? –

+0

Non posso passare il parametro extra, dato che non posso usare alcun "hook" per aggiungere parametri all'Intent, nessuna di queste 3 funzioni viene chiamata – max4ever

+0

Si prega di incollare il contenuto di @ xml/ricercabile. –

risposta

0

Verificare se si Hai stringhe hard codificate per android:hint o android:label in res/xml/searchable.xml. Devono essere ID delle risorse stringa.

+0

sono risorse di stringa – max4ever

6

dati Pass con fascio a Search Widget:

layout/main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="@string/hello" /> 
    <Button android:id="@+id/button" android:text="test" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
</LinearLayout> 

layout/searchable.xml:

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/search_label" 
    android:hint="@string/search_hint" 
    android:searchMode="showSearchLabelAsBadge" 
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" 
    android:voiceLanguageModel="free_form" 
    android:voicePromptText="@string/search_invoke" 
    android:searchSuggestSelection=" ? " 
/> 

valori/stringhe .xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="hello">Hello World, SearchTest!</string> 
<string name="app_name">Searchtest</string> 
<string name="search_label">Search Test</string> 
<string name="search_hint">1234</string> 
<string name="search_invoke">234</string> 
<string name="search_query_results">544545</string> 
</resources> 

AndroidManifest.xml:

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".SearchWidgetExampleTest" > 
      <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=".ResultActivty" /> 
     </activity> 

     <activity android:name=".ResultActivty" 
        android:label="@string/search_query_results"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.SAMPLE_CODE" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
      <meta-data android:name="android.app.searchable" 
         android:resource="@layout/searchable" /> 
     </activity> 
    </application> 

ResultActivty.java:

package org.imranandroid.TestSearchexmp; 
import android.app.Activity; 
import android.app.SearchManager; 
import android.os.Bundle; 
import android.widget.Toast; 

public class ResultActivty extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Bundle bundled= getIntent().getBundleExtra(SearchManager.APP_DATA); 
     Long ttdata=bundled.getLong("listino_id"); 
     Toast.makeText(this, ttdata.toString(), Toast.LENGTH_SHORT).show(); 
    } 
} 

SearchWidgetExampleTest.java:

package org.imranandroid.TestSearchexmp; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class SearchWidgetExampleTest extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button1 = (Button) findViewById(R.id.button); 
     button1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onSearchRequested(); 
      } 
     }); 
    } 
    @Override 
    public boolean onSearchRequested() { 
     Bundle appDataBundle = new Bundle(); 
     appDataBundle.putLong("listino_id", 4434724724L); 
     startSearch("imran", false, appDataBundle, false); 
     return true; 
    } 
} 

Codificare felicemente !!!

+1

grazie, funziona come normale ricerca, ma non usa il WIDGET di ricerca, come in http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget o come in vedi screenshot qui http://stackoverflow.com/questions/9588810/how-to-hide-unhide-the-actionbar-list-on-android-3 – max4ever

0

Se le chiamate sono sincroniche (si esegue una richiesta di ricerca e si attende una risposta e non si esegue alcuna richiesta di ricerca finché non si ottiene la risposta), è facile.

Basta creare una classe statica di supporto per farlo per te.

Qualche cosa come questa:

public static Bundle myStaticClass; 
. 
. 
. 
myStaticClass.putString(key, value); 
callSearch(); 
. 
. 
. 
afterSearchResponse(); 
String value = myStaticClass.get(key); 
+0

e questo mi aiuta come? – max4ever

+0

Hai chiesto informazioni sul trasferimento dei dati, quindi questo è il modo in cui puoi farlo, se ti fraintendiamo, modifica la tua domanda per essere più comprensibile. –

1

quando si interroga da SearchView (ricercabile || widget di SearchView) si può passare parametri a searchActivity (searchResultActivity) per definire il proprio OnQueryTextListener come questo.

searchView.setOnQueryTextListener(new OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextChange(String arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      Intent searchIntent = new Intent(getApplicationContext(), SearchResultsActivity.class); 
      searchIntent.putExtra(SearchManager.QUERY, query); 
      searchIntent.setAction(Intent.ACTION_SEARCH); 
      startActivity(searchIntent); 
      return true; 
     } 
    }); 
0

è possibile utilizzare il seguito

nel menu

@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_al_ayats, menu); 

    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    Bundle appData = new Bundle(); 
    appData.putString("hello", "world"); 

    searchView.setAppSearchData(appData); 

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

    return true; 
} 

e nella vostra attività risultato di ricerca messo il seguito

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_activity_search_result); 

    handleIntent(getIntent()); 
} 

    private void handleIntent(Intent intent) { 

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String extrastring=intent.getBundleExtra(SearchManager.APP_DATA).getString("hello"); 
     //use the query to search your data somehow 
     getSupportActionBar().setTitle(extrastring); 
    } 
}