2016-03-18 2 views
0

Я хочу реализовать поиск в своем приложении с помощью SearchView. Я следую this учебнику.SearchView не отвечает в android

я с активностью, которая содержит 3 вкладки .На панели инструментов, я хочу использовать поиск .Screenshot приведен ниже:

Screenshot

Я успешно добавили три вкладки в моем activity.Now к реализовать SearchView, я использую следующий код в моей деятельности:

@Override 
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())); 
      } 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

menu_friend_list_activity.java

<?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> 

searchable.xml под Рез/папку XML

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:hint="@string/search_hint" 
    android:label="@string/app_name" /> 

SearchResultActivity.java

public class SearchResultsActivity extends Activity { 
@SuppressLint("MissingSuperCall") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    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("Query",query); 
     //use the query to search your data somehow 
    } 
} 

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> 

При нажатии на значок поиска отображается окно поиска. Но при вводе текста он должен отображать строку, введенную в методе handleIntent(). Я не могу получить, что я вхожу в поиск. Возможно, что я делаю что-то неправильно здесь. Пожалуйста, помогите мне понять работу SearchView.

+0

'Я хочу реализовать поиск в своем приложении с помощью SearchView' так, что вы хотите найти в своем приложении? – pskink

+0

@pskink: спасибо за ответ. Как вы можете видеть на скриншоте, у меня есть 3 вкладки в моей активности. Одна из вкладки отображает список последних чатов. Если я ввожу имя пользователя, которому был выполнен чат, он должен отображаться. Это то, что я хотеть. –

+0

http://pastebin.com/e7HLF6X6 – pskink

ответ

0
<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> 

ваш AndroidManifest.xml изменения ниже. Если у вас есть вложенная папка в вашем пакете, вы должны установить полное имя пакета в метаданных.

<activity 
     android:name=".activity.FriendsListActivity" 
     android:parentActivityName=".activity.WelcomeActivity"> 
     <!-- To display the search view--> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value="your.package.name.activity.SearchResultsActivity" /> 

    </activity> 
    <activity android:name=".activity.SearchResultsActivity" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action 
       android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 
Смежные вопросы