2011-01-02 7 views
1

Hallo im eine durchsuchbare Aktivität in meiner Anwendung zu verwenden, versuchen aber, wenn die Suchtaste gedrückt wird nichts passiertandroid durchsuchbare nicht öffnen

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.test" android:versionCode="1" android:versionName="1.0.0" android:configChanges="keyboardHidden|orientation"> 
     <uses-sdk android:minSdkVersion="7"/> 
     <application android:icon="@drawable/icon" android:label="Test"> 
      <activity android:name=".Test" android:label="Test" android:debuggable="true" android:theme="@android:style/Theme.NoTitleBar" android:launchMode="singleTask"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN"/> 
        <category android:name="android.intent.category.LAUNCHER"/> 
       </intent-filter> 
      </activity> 
      <activity android:name=".Searchable"> 
       <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="@xml/searchable"/> 
      </activity> 
      <meta-data android:name="android.app.default_searchable" android:value=".Searchable"/> 
     </application> 
    </manifest> 

Searchable.xml (res/xml/durchsuchbar .xml)

<?xml version="1.0" encoding="utf-8"?> 
    <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="Search" android:hint="Perform Search"> 
    </searchable> 

Searchable.java (src/com/test/test/Searchable.java)

package com.test.test; 

import android.app.Activity; 
import android.app.SearchManager; 
import android.content.Intent; 
import android.os.Bundle; 

public class Searchable extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     handleIntent(getIntent()); 
    } 
    @Override 
    protected void onNewIntent(Intent intent) { 
     setIntent(intent); 
     handleIntent(intent); 
    } 
    private void handleIntent(Intent intent) { 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
     } 
    } 
} 

TIA,

ng93

+0

Haben Sie nicht vergessen, eine Ansicht zu zeigen? Wie: setContentView (R.layout.main); –

Antwort

3

Ihre Searchable Aktivität etwas zu tun hat - und tatsächlich Ergebnisse angezeigt werden.

Ich schrieb ein, wie durch eine Antwort auf eine Frage vorgeschlagen, dass ich gestern fragte Trying to filter a ListView with runQueryOnBackgroundThread but nothing happens - what am I missing?

Schauen Sie sich diese Dokumentation für den Umgang mit der integrierten Suchunterstützung zu integrieren: Using the Android Search Dialog und schauen in diesem Artikel auf, wie Anregungen bieten wie der Kunde tippt: Adding Custom Suggestions

Ihre Klasse Searchable muss ein bisschen mehr nach dem Abrufen der Abfrage-Zeichenfolge. Zum Beispiel in meiner Tätigkeit nach dem Abfrage-String bekommt ich dies tun:

 showResults(query); 

und das Verfahren sieht wie folgt aus:

private void showResults(String query) { 
    // Load the list of countries based on the query 
    Cursor countryCursor = myDbHelper.getCountryList (query); 
    startManagingCursor (countryCursor); 

    // Hook up the query results to the list view 
    String[] from = new String[] { 
     WorldInfoDatabaseAdapter.KEY_COUNTRYCODE, WorldInfoDatabaseAdapter.KEY_COUNTRYNAME 
    }; 
    int[] to = new int[] { 
     R.id.countryflag, R.id.countryname 
    }; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter (this, 
      R.layout.country_list_row, countryCursor, from, to); 
    adapter.setViewBinder (new FlagViewBinder()); 

    myCountryList.setAdapter (adapter); 
    myCountryList.setOnItemClickListener (new OnItemClickListener() { 

     @Override 
     public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 
      String countryName = myDbHelper.getCountryByID (id); 
      if (countryName == null) { 
       new AlertDialog.Builder (SelectCountryActivity.this).setMessage (
         "Internal error: Cannot find the country with id'" + id + "'.").show(); 

       return; 
      } 

      // Package up the country name to return 
      Intent newCountryIntent = new Intent (myCountryList.getContext(), WorldInfoActivity.class); 
      newCountryIntent.putExtra (WorldInfoActivity.KEY_SELECTED_COUNTRY, countryName); 
      startActivity (newCountryIntent); 

      startActivity (newCountryIntent); 
      finish(); 
     } 
    }); 
} 

Das Mitglied myDbHelper fragt meine Datenbank für Länder, die die übergebene in Query-String haben und zeigt sie in einer Liste an. Meine Tätigkeit ein Layout, das wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    style="?pageBackground"> 
    <TextView 
     android:id="@+id/selectdlgtitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/select_country_title" 
     style="?dlgTitle" /> 
    <ListView 
     android:id="@+id/countrylist" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:cacheColorHint="#00000000" 
     android:padding="2px"/> 
    </LinearLayout> 

Sie wahrscheinlich ohne setViewBinder Anruf tun kann - ich brauche das, weil ich die Übersetzung der Ländercode-Feld in einem Flag-Symbol.

+0

Danke aber immer noch nicht zur Arbeit. Ich habe System.out.println ("Suchen") hinzugefügt; onCreate() und onNewIntent(), aber auch nicht zu sehen. – ng93

+5

Ich habe gerade heute Morgen mehr über dieses Thema gelesen, und ich erinnere mich an einige Leute, die sagten, dass sie nicht mit konstanten Strings in der Datei searchable.xml arbeiten konnten. Zwei Leute berichteten, dass sie mit konstanten Strings lange Zeit mit dem Debugging beschäftigt waren und es nie funktionierte. Als sie zu String-Ressourcen wechselten, war alles gut. –

+1

wechselte zu String-Ressourcen und funktioniert perfekt: D cheers – ng93

Verwandte Themen