2015-08-24 19 views
8

Kullanıcı türleri olarak bir açılır menü açılır penceresinin görüntüleneceği bir SearchManager kurulumum var. Sonuçlar benim sunucumdan (http). Her seçenekle bir simge görüntülemek istiyorum (dosya aslında mevcutsa).Arama Önerileri için SUGGEST_COLUMN_ICON_1 web URL'sini kullanma

docs bakınca sürekli sütunda SUGGEST_COLUMN_ICON_1 için seçenekler Bu seçeneklerin sağlar bkz:

Column name for suggestions cursor. Optional. If your cursor includes this column, then all suggestions will be provided in a format that includes space for two small icons, one at the left and one at the right of each suggestion. The data in the column must be a resource ID of a drawable, or a URI in one of the following formats: 

content (SCHEME_CONTENT) 
android.resource (SCHEME_ANDROID_RESOURCE) 
file (SCHEME_FILE) 

Tek sahip bir URL'dir. Hangi seçenek benim için en iyi seçenek olur? İşte

yapıyorum class geçerli:

public class MyCustomSuggestionProvider extends SearchRecentSuggestionsProvider { 

    public static final String AUTHORITY = "---.MyCustomSuggestionProvider"; 
    public static final int MODE = DATABASE_MODE_QUERIES; 
    private final static String[] COLUMN_NAMES = {BaseColumns._ID, 
      SearchManager.SUGGEST_COLUMN_TEXT_1, 
      SearchManager.SUGGEST_COLUMN_TEXT_2, 
      SearchManager.SUGGEST_COLUMN_QUERY, 
      SearchManager.SUGGEST_COLUMN_INTENT_DATA, 
      SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, 
      SearchManager.SUGGEST_COLUMN_ICON_1, 
      SearchManager.SUGGEST_COLUMN_INTENT_ACTION}; 

    public MyCustomSuggestionProvider() { 
     setupSuggestions(AUTHORITY, MODE); 
    } 

    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, 
         String[] selectionArgs, String sortOrder) { 

     Cursor recentCursor = super.query(uri, projection, selection, 
       selectionArgs, sortOrder); 

     String query = selectionArgs[0]; 
     if (query == null || query.length() < 3) { 
      return recentCursor; 
     } 

     final MatrixCursor customCursor = new MatrixCursor(COLUMN_NAMES); 

     // Get web results from Retrofit Library 
     List<TheProfile> suggestions = RestClient.get().getCustomSearch(query, MyApp.getUserId()); 

     for (TheProfile suggestion : suggestions) { 


      Uri searchIconUri = Uri.parse("http:/---/profile_images/" + String.valueOf(suggestion.id) + ".png"); 
      try { 
       customCursor.addRow(new Object[]{ 
         suggestion.id, suggestion.profile, suggestion.subcategory, suggestion.profile, suggestion.profile, suggestion.subcategory, searchIconUri, "android.intent.action.SEARCH"}); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return customCursor; 
    } 
} 

cevap

4

Bu soruya hala cevap arayanlar için yaptığım gibi. Koduma oldukça benziyor, bu yüzden paylaşmaya karar verdim. Hepsini bir araya getirmek için saatler harcadım. Belki birisi için biraz zaman kazanırım. Her şeyden önce, Glide library'a ihtiyacınız olacak.

uygulamanızın build.gradle dosyasına ekleyin:

repositories { 
    mavenCentral() // jcenter() works as well because it pulls from Maven Central 
} 

dependencies { 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
    compile 'com.android.support:support-v4:19.1.0' 
} 

Şimdi (MyCustomSuggestionProvider sınıfında) sorudan kod bazı değişiklikler yapalım: sizin for (TheProfile suggestion : suggestions) {

FutureTarget<File> futureTarget = Glide 
     .with(getContext().getApplicationContext()) 
     .load(searchIcon) 
     .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL); 

File cacheFile = futureTarget.get(); 
Uri searchIconUri = Uri.fromFile(cacheFile); 
içine koy

Bu satır satırına dikkat edin: .with(getContext().getApplicationContext()) Sadece bağlam değil, Uygulama Bağlamı almak çok önemlidir, çünkü ImageView'da bmp. Bu tür Glide kullanımı için Official Glide documentation.

Ve sonuçta Arayabileceğin

:

// do things with bitmap and then release when finished: 
Glide.clear(futureTarget); 
+1

Doğru hikaye: Aynı soruyu bir kez daha araştırdım, bu sayfayı buldum ve bu çözümü uyguladı. Harika çalışıyor. Eh, çoğunlukla. Meselenin bir kısmı bende kalıyorum. .placeholder() 'a ihtiyacım var ve henüz yukarıda çalışmak için henüz çözemedim. Ama ben görüntüleri alıyorum. Bunun neden doğru bir şekilde işaretlenmediğini merak ediyordum. Sonra ben bu soruyu sorduğumu farkettim! Eh, iki yıl sonra, doğru bir şekilde işaretliyorum. Gecikme özür dileriz;) – KickingLettuce

2
  1. simgeleri olarak kullanacağız tüm dosyaları toplayın. Muhtemelen sunucunuzdalar; Bunları uygulamanıza gömmeniz gerekir.

  2. .PNG biçiminde değilse, bunları .PNG biçimine dönüştürün. Uygulamanızda görüntülemek için ihtiyacınız olan boyuta ölçeklendirin.

  3. Bunları Android projenize/res/drawable-mdpi klasörüne ekleyin. Bunları mdpi'ye özgü klasöre koymak, farklı aygıt çözünürlüklerinde aynı boyutta ölçeklendirir.

  4. Simgelerin kodunun ilk kısmı, SearchManager için dönmek üzere URI'leri alıyor. biçiminde "android.resource" düzeni kullanın: Örneğin, her simge için bir final URI yaratabilir

    android.resource://<package-name>/<resource-type>/<resource-name> 
    

    .

    private final Uri searchIconUri = Uri.parse("android.resource://com.mycompany.android/drawable/ic_autocomplete_1"); 
    
  5. Önerilerinizde içinde döngü gibi, bir switch ifadesiyle, örneğin gerekli olan simge belirlemek ve bu URI koydu: İşte /res/drawable-mdpi/ic_autocomplete_1.png benim projede kullanılan bir URI örneğidir Kodunuzda olduğu gibi satır nesnesiniz.

+0

Evet, çok üstlendi. Bu bölümün nasıl yapıldığına dair bir fikrin var mı? Bu benim sorumun bir parçasıydı, ama bunu çok iyi açıklayamadım. "Sunucudan göstereceğiniz tüm simgeleri yakalayın ve onlarla birlikte çizilebilir kaynaklar oluşturun". Ayrıca, öneri sonuçlarımdan da bahsediyorum. Bunu bir seferde yapabilir miyim? (soruya kod ekleyerek). – KickingLettuce

+0

no, bunları res/drawable olarak saklamanız gerekmez, çünkü aşağıdakilerden birini kullanabilirsiniz: kaynak kimliği (SCHEME_ANDROID_RESOURCE ile URI ile aynı) veya URI n aşağıdaki biçimlerden biri: SCHEME_CONTENT, SCHEME_ANDROID_RESOURCE (önerileriniz) ya da SCHEME_FILE, böylece SCHEME_CONTENT ya da SCHEME_FILE dosyasını – pskink

+0

@ KickingLettuce ikon dosyasına yönlendirmek için kullanabilirsiniz, cevabımı biraz daha açık ve spesifik olmak için güncelledim. Eğer başka sorunuz varsa bana haber verin. –

İlgili konular