Merhaba arkadaşlar,

navigation menu içinde fragment conteiner oluşturdum. searchview'i intent olarak ekledim. searcbar da arama yaptığımda farklı bir activity aciliyor fakat seçtiğim fragment içinde acilmasi için ne yapmaliyim

tüm proje: https://github.com/tutked/navigation_searcview

soruldu: 12 Nis, 15:44

kypdk's gravatar image

kypdk
18591623
cevap kabul oranı: 10%


Merhabalar.. Anladığım kadarıyla SearchView ile yaptığın aramanın sonucu senin uygulamanda Arama isimli Activity'de gözüküyor.Ama sen sonucu MainActivity içinde çağırmış olduğun Anasayfa.java'da (Fragment) görmek istiyorsun.

Projene göz attım, ve sorunun cevabı için farklı bir yöntem uyguladım. Bu yöntemde;

MainActivity içerisinde Override edilen onCreateOptionsMenu() metodu içerisindeki searchView nesnesini static olarak tanımla. Buradaki amaç Anasayfa.java içerisinden bu nesneye erişebilmektir.

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    public static SearchView searchView;

daha sonra trans.replace(R.id.fragment_container, f1).commit(); kodunu aynı onCreateOptionsMenu() metodunun içine al.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    trans.replace(R.id.fragment_container, f1).commit();

    return true;
}

Bu işlemi yaparak, searchView nesnesinin ataması gerçekleştikten sonra Fragment'in başlamasını sağlamış oluyoruz.

Anasayfa.java içindeki onCreate() metodu içinde searchView2 adında yeni bir SearchView nesnesi oluştur, buna static olarak tanımladığın MainActivity'deki searchView değerini ata. Ve oluşturmuş olduğun searchView2'ye onQueryTextListener() dinleyicisini ekleyip kullanıcı arama yaptığında çalışması gereken kodları onQueryTextSubmit() içinde belirle.

    SearchView searchView2 = MainActivity.searchView;
    searchView2.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            Log.e("aranan kelime",query);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

Son olarak; Manifest.xml içinde belirttiğin meta-data değerlerini, artık Arama sayfasını kullanmayacağın için sil.

        <meta-data
            android:name="android.app.default_searchable"
            android:value="kypdk.navisearch.Anasayfa" />

Sorunun farklı bir yöntemle çözümünü bilen arkadaş varsa lütfen yazmasını rica ediyorum. Yapmış olduğum yöntem bana biraz uzun geldi.Eğer daha kısa bir yöntem varsa ben bu yöntemi öğrenmek isterim :)

Kolay gelsin..

permanent link

cevaplandı: 14 Nis, 10:09

umonn's gravatar image

umonn
80013
cevap kabul oranı: 25%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819

Soruldu: 12 Nis, 15:44

Görüntüleme: 219 kez

Son güncelleme: 14 Nis, 10:09

powered by BitNami OSQA