2012-01-29 12 views
6

Tüm arama belgelerini oluşturmak ve özel öneriler eklemekle ilgili çevrimiçi belgeleri okudum ... ama bunun nasıl çalıştığına dair hala belirsiz değilim. Belgeler, "Önerileriniz için bir tablo (SQLiteDatabase'de olduğu gibi) oluşturmalı ve tabloyu gerekli sütunlarla biçimlendirmem gerektiğini" söyledi. Sistemin sonunda bu tabloyu kendi başına uygun önerilerle dolduracağını farz edeyim ... ama hangi süreç/sınıf bunun için sorumludur ve gerçek eklentiler ne zaman ortaya çıkacaktır (herhangi bir sorgu kullanıcı tarafından yapılmadan önce sorgu kullanıcı tarafından yapıldı vb.)? Ve burada bir soru soruyorum, birisi AutoCompleteTextView ve bir SearchView w/özel öneriler arasındaki farkı açıklığa kavuşturabilirse ... bu harika olurdu. AutoCompleteTextView, SearchView (ContentProvider, SQLiteDatabase yardımcı sınıfı vb. Için yapılması gereken değişiklikler) ile karşılaştırıldığında, uygulanması kolay görünüyor.SearchManager - özel öneriler ekliyorum

cevap

5

Özel önerilerinizi, arama görünümüne girilen bir sorguya göre ileten bir içerik sağlayıcısı oluşturmanız gerekir. Searchable.xml dosyasında, arama ifadesinin minimum uzunluğunu yapılandırırsınız; bu, öneri istemeden önce ulaşılması gereken arama ifadesidir. Bu içerik sağlayıcıya bir öneri sağlayıcısı denir (ContentProvider'ı genişletir). İçerik sağlayıcısının yetkisi de searchable.xml dosyasında yapılandırılmıştır.

Öneri sağlayıcısının önerilerini nasıl hesapladığı konusunda herhangi bir sınırlama yoktur. Web sorgusunu bir veritabanında arayabilir veya bir dosya okuyabilirsiniz. Ancak sorgunun cevabı bir tablo biçimindedir. Öneriler bir veritabanından doğrudan sorgulanırsa, sonucu içerik sağlayıcısının query() yöntemine iletmek için veritabanı sorgusu tarafından yanıtlanan imleci kullanabilirsiniz. Sonuç bir veya daha fazla kaynaktan hesaplanırsa, bir MatrixCursor kullanarak anında bir tablo oluşturabilirsiniz.

Öneri sağlayıcısından gelen yanıt satırları, öneriyi görüntülemek için arama mekanizması tarafından kullanılır, bir tabloda depolanırlar.

private static final String[] COLUMNS = { 
    "_id", 
    SearchManager.SUGGEST_COLUMN_ICON_1,  // ID of a drawable (icon) as String 
    SearchManager.SUGGEST_COLUMN_TEXT_1,  // main text for suggestion display 
    SearchManager.SUGGEST_COLUMN_TEXT_2,  // secondary text for suggestion display 
    SearchManager.SUGGEST_COLUMN_INTENT_DATA, // this could be an URI to access the suggestion as used in an intent with a VIEW action 
    SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // this could be Intent.ACTION_VIEW 
    SearchManager.SUGGEST_COLUMN_SHORTCUT_ID // e.g. SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT 
}; 

Arıyor daha ayrıntılı olarak burada tarif edilir: şu şekildedir: satır biçimidir http://developer.android.com/guide/topics/search/index.html

+0

... Tamam ben anlamaya başlıyorum düşünüyorum. Ancak, öneriler masaya ne zaman yerleştirilir ve öneriler nelerdir ve önerilerin hangi formatı vardır? Kafam karıştıran şey bu. Bu tür bir "otomatik tamamlama"/öneri özelliğinin bir Trie veya bir şey kullanarak uygulanacağını varsayabilirim. –

+0

yani öneri tablosu nasıl görünür? veya ortaya çıkan tablo mutlaka insan tarafından okunabilir değil midir? Bu tablo ne zaman oluşturulur ('execSQL' kullanarak oluşturmalısınız)? –

+0

Veritabanımdaki belirli bir sütun üzerinde basit bir "otomatik tamamlama/önerme-tamamlama" arama özelliği almak istiyorum ... ama eğer tüm veritabanımı değiştirip bir sürü dosya ile uğraşmak demek oluyorsa, her zaman geri dönebilirdim daha sonraki bir tarihte (hala bu şeyin uygulanması uzun sürmemesi gerektiğine inanıyorum! tek istediğim, veritabanımdaki tek bir sütun dizisi üzerinden otomatik olarak tamamlanabilen sistemdir!). –