2016-03-29 30 views
1

Ben aşağıdaki ekran uygulamak için benim application.I içinde Arama gibi WhatsApp uygulamak zorunda çalışıyorum çağrılmaz seçenek menüsü olarak.Aranabilir Aktivite

XML: arama simgesi arama görünümünü tıklayarak On

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     android:icon="@drawable/search" 
     android:orderInCategory="100" 
     android:title="@string/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" /> 
</menu> 

açılacak.

KODU:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_friend_list_activity, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_search: 
      Toast.makeText(getApplicationContext(), "Search button clicked", Toast.LENGTH_SHORT).show(); 

      // Associate searchable configuration with the SearchView 
      SearchManager searchManager = (SearchManager) FriendsListActivity.this.getSystemService(Context.SEARCH_SERVICE); 
      if (item != null) { 
       searchView = (SearchView) item.getActionView(); 
      } 
      if (searchView != null) { 
       searchView.setSearchableInfo(searchManager.getSearchableInfo(FriendsListActivity.this.getComponentName())); 
       searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
        @Override 
        public boolean onQueryTextSubmit(String query) { 
         Log.e("Query",query); 
         return false; 
        } 

        @Override 
        public boolean onQueryTextChange(String newText) { 
         return false; 
        } 
       }); 
      } 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

AndroidManifest.xml

<activity 
     android:name=".activity.FriendsListActivity" 
     android:parentActivityName=".activity.WelcomeActivity"> 
     <!-- To display the search view--> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 
    <activity android:name=".activity.SearchResultsActivity"> 
     <intent-filter> 
      <action 
       android:name="android.intent.action.SEARCH" 
       android:launchMode="singleTop" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
     </intent-filter> 
    </activity> 

Burada görebilirsiniz i aranabilir etkinlik adında SearchResultsActivity var. this eğiticisini takip ediyorum.

SearchResultsACtivity: Ben i, SearchResultsActivity zarar bulursanız i WhatsApp gibi arama yapmak nasıl uygulayabileceğiniz bana yardım çağrılmaz aramak çalışıyorum şeylerin yanlış here.When yapıyorum düşünüyorum

public class SearchResultsActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    Log.e("onCreate","in SerachActivity called"); 
    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     Log.e("Query1",query); 
     //use the query to search your data somehow 
     } 
    } 
} 

?

+0

Hiçbir zaman SearchResultsActivity'yi başlatmıyorsunuz? –

+0

bunun için TextWatcher'ı da kullanabilirsiniz –

+0

@MuratK. : Belgelere göre "Aranabilir bir etkinlik, uygulamanızda bir sorgu dizgisine dayalı arama yapan ve arama sonuçlarını sunan bir aktivitedir. Kullanıcı arama iletişim veya widget'ında bir arama gerçekleştirdiğinde, sistem aranabilir etkinliğinizi başlatır. ve ACTION_SEARCH eylemiyle bir Intent'te arama sorgusunu sunar.Aranabilirliğiniz, sorgunun amacının QUERY ekstraından alınmasını sağladıktan sonra verilerinizi arar ve sonuçları sunar. " –

cevap

0

Android öğretici here'u okuyorsunuz sanırım, bu sayfa tamamen yanlış değilse çok kafa karıştırıcı. Kodunda yanlış giden iki yer var.

  1. Eğer searchView#setSearchableInfo diyoruz

    , kendi vaka SearchResultsActivity içinde, arama sonucuna işlemek için başlatmak için Android neyi aktiviteyi söylüyoruz. Yani FriendsListActivity bileşen adını ayarlamak olamaz, bunun yerine searchManager tarafından bulunmasını mümkün olan bir aranabilir hale gelmesi bir aktivite için Amacıyla SearchResultsActivity.searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchResultsActivity.class)))

  2. olarak değiştirin şunları yapmanız android.app.searchable meta veri etiketini eklemeniz gerekir Bildirinizdeki etkinlik bloğu. Bu etiketi, SearchView'u görüntülediğiniz etkinliğe NOT eklenmelidir, öğretici sayfa tamamen yanlış bildirir. Dolayısıyla, SearchResultsActivity işlevinizi aşağıdakine değiştirin. Bu iki değişiklik yaptıysanız

, FriendsListActivity adresinin SearchView olur doğru SearchResultsAcitivity başlatmak mümkün olan bir mSearchable örneğini tutmaktadır. Aksi takdirde boş olacaktır.

<activity android:name=".activity.SearchResultsActivity"> 
    <intent-filter> 
     <action 
      android:name="android.intent.action.SEARCH" 
      android:launchMode="singleTop" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable"/> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
    </intent-filter> 
</activity>