2015-03-28 2 views
0

Мне нужно создать поиск в строке поиска, но я не могу обработать элемент поиска.Обращение к панели действий панели действий Android

Вот мое меню XML пункт:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@+id/action_search" 
     android:title="Search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:showAsAction="ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 

И я переопределить onOptionsItemSelected метод для обработки деталь:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle presses on the action bar items 
    switch (item.getItemId()) { 

     case R.id.action_search: 
      System.out.println("press search"); 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Вот мой AndroidManifest:

<meta-data 
      android:name="android.app.default_searchable" 
      android:value=".app.Search" /> 

    <activity android:name="com.example.tutorial_search_actionBar.MyActivity" 
       android:label="@string/app_name"> 

     <intent-filter> 
      <action android:name="android.intent.action.SEARCH"/> 

      <meta-data 
        android:name="android.app.searchable" 
        android:resource="@xml/searchable" /> 

     </intent-filter> 
    </activity> 

Но когда я нажимаю элемент поиска в панели действий 1.my клавиатуры не имеет ключа поиска и 2.doesn't печати «нажмите кнопку» поиск

Что я должен делать

ответ

0

Тест

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourAppName="http://schemas.android.com/apk/res-auto" > 

    <item android:id="@+id/action_search" 
     android:title="@string/action_search" 
     android:icon="@drawable/ic_action_search" 
     yourAppName:showAsAction="ifRoom|collapseActionView" 
     yourAppName:actionViewClass="android.support.v7.widget.SearchView" /> 
</menu> 


@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_xml, menu); 
    MenuItem menuItem = menu.findItem(R.id.action_search); 
    searchView = (SearchView) MenuItemCompat.getActionView(menuItem); 
    searchView.setOnQueryTextListener(this); 

    final int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     menuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       // Do something when collapsed 
       getLoaderManager().initLoader(1, null, YourClass.this); 
       return true; // Return true to collapse action view 
      } 
     }); 
    } else { 
     MenuItemCompat.setOnActionExpandListener(menuItem, new MenuItemCompat.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       getLoaderManager().initLoader(1, null, YourClass.this); 
       return true; 
      } 
     }); 
    } 
    searchView.setIconifiedByDefault(true);  
} 
0

Я описываю всю процедуру добавления поиска в панель действий. Эти фрагменты кода работали для меня.

Добавить поиск в меню: добавить в элемент меню, в котором требуется поиск, следующий элемент.

<item 
android:id="@+id/search" 
android:title="@string/search_title" 
android:icon="@drawable/ic_action_search" 
app:showAsAction="collapseActionView|ifRoom" 
app:actionViewClass="android.support.v7.widget.SearchView"/> 

Примечание: файл макета меню должен содержать следующую схему. xmlns:app="http://schemas.android.com/apk/res-auto"

Создайте поисковую конфигурацию: создайте файл searchable.xml в каталоге res/xml. скопируйте в него следующий код. Метод

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

Изменить onCreateOptionsMenu(): В методе onCreateOptionsMenu() вашей деятельности, ассоциируют для поиска конфигурации с SearchView по телефону setSearchableInfo (SearchableInfo): Ваш onCreateOptionsMenu должен выглядеть следующим образом.

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_display_cards, menu); 
    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    //SearchView searchView = 
    //  (SearchView) menu.findItem(R.id.search).getActionView(); 
    MenuItem mSearchMenuItem = menu.findItem(R.id.search); 
    SearchView searchView = 
    (SearchView)MenuItemCompat.getActionView(mSearchMenuItem);   
    searchView.setSearchableInfo(searchManager.getSearchableInfo(
      new ComponentName(getApplicationContext(), 
      SearchResultsActivity.class))); 
    return true; 
} 

0 0 0 0 В файле манифеста добавьте следующие

<activity 
     android:name=".SearchResultsActivity" 
     android:label="@string/title_activity_search_results" > 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" 
      android:value=".SearchResultsActivity"/> 
</activity> 

Ваш SearchResultsActivity должен реализовать следующие методы

@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); 
     //use the query to search your data and show it in 
     //SearchResultsActivity 
    } 
} 

Примечание: Вы должны вызвать следующую из OnCreate метод SearchResultsActivity

handleIntent(getIntent()); 
Смежные вопросы