SORU
29 AĞUSTOS 2011, PAZARTESİ


Android Parçaları ile arama

Birisi bir öğretici veya Fragment s Android search interfacestandart uygulamak için nasıl bir örnek biliyor mu? Diğer bir deyişle, bir Parça SearchManager ile standart bir arama koymak mümkün mü?

CEVAP
3 Mayıs 2012, PERŞEMBE


Kısacası, yapamazsın. Fragment içinde bir arama arayüzü oluşturmak mümkün değildir nedenleri bir çift vardır.

  1. Aranabilir bir arayüz oluştururken, varsayılan belirtmelisiniz "faaliyet Android tezahür". aranabilir Senin de bildiğin gibi, Fragment bir ebeveyn olmadan Activity mevcut ve bu nedenle, bu ayrım mümkün değildir.

  2. Eğer zaten #1 zaten anladım, ben sihirli olduğuna umuduyla bu soruyu "o" işi. hack sorduğunu varsayıyorum Ancak, belgelere belirtmektedir

    Kullanıcı aramak için bir arama veya iletişim widget yürütür, sistem aranabilir aktivite başlar ve arama sunar ACTİON_SEARCH eylemi ile bir Niyet sorgu. Arama etkinlik amacı bu sorgudan sorgu ekstra, sonra alır veri arama ve hediyeler sonuçları.

    Temel, dahili sistem sorumlu sağlayan arama sonuçları bekliyor Activity, Fragment; bu nedenle, uygulama bir arama arayüzü olan tamamen bağımsız bir Activity mümkün değildir, bunu gerektirecek bir değişiklik içintemel sistem kendisi. Eğer inan bana:) sen eğer ... SearchableInfo sınıf için kaynak kodunu kontrol edin.

Bu varlık, bir şey tarif ne benzer ulaşmak çok zor olacak gibi görünmüyor. " dedi. Mesela, şöyle düşünebilirsin uygulama arama Faaliyeti böylece devam ediyor android.intent.action.SEARCH niyet ve (yerine hemen görüntüleme sonuçlarında ListView, örneğin) geçecek bu arama sorgusu için Fragmentler. Örneğin, aşağıdaki aranabilir Etkinliği göz önünde bulundurun:

public class SearchableActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) {
          String query = intent.getStringExtra(SearchManager.QUERY);
          doMySearch(query);
        }
    }

    /**
     * Performs a search and passes the results to the container
     * Activity that holds your Fragments.
     */
    public void doMySearch(String query) {
        // TODO: implement this
    }
}

Arama isteği yapıldığında, sistem aranabilir etkinlik başlatmak, sorgu gerçekleştirmek ve bazı konteyner Faaliyet (doMySearch uygulamanızı dayalı) sonuçları geçer. Konteyner Faaliyet sonra bulunan aranabilir bu sonuçlar geçecek olan sonuçlar görüntülenir Fragment,. Uygulanmasını gerektirir biraz daha fazla iş, daha ne olduğunu muhtemelen umut, ama eminim yapmanın yolları var bunu yapabilirsin daha modüler, ve bu gibi görünüyor, bu belki de en iyi sen yapabilirsin.

p.s. Eğer bu yaklaşımı kullanırsanız, hangi Faaliyetleri eklendi/backstack kaldırmak için özel dikkat gerekebilir. Bunu düşünün, ne kadar daha fazla bilgi için post bunu görüyor.

p.p.s. Ayrıca Raghav's post below açıklandığı gibi standart arama arayüzü tamamen unutun ve sadece basit bir arama uygulamak Fragment içinde olabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011
  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • SoundHound

    SoundHound

    8 Mart 2006