2014-10-15 4 views
12

У меня есть панель действий, содержащая searchview. Когда пользователь нажимает кнопку поиска и сворачивает поиск, на панели действий отображается обратная кнопка с левой стороны.обнаружение щелчка на кнопке возврата панели действий - (OnOptionsItemSelected не звонит, когда нажимает кнопку назад на панели действий)

enter image description here

Как мы можем определить, когда пользователь нажимает на кнопку это обратно?

Редактировать

на основе ответа я проверил мой OnOptionsItemSelected, но не вызывая слишком. Это код моего OnOptionsItemSelected:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    if (item != null && id == android.R.id.home) { 
     if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) { 
      mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT); 
     } else { 
      mNavigationDrawerFragment.openDrawer(Gravity.RIGHT); 

     } 
     return true; 
    } 
    if (id == R.id.action_search) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

http://stackoverflow.com/questions/14437745/how-to-override-action-bar-back-button-in-android – codePG

ответ

11

Надень это метод onCreateOptionsMenu:

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 

     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 

     //DO SOMETHING WHEN THE SEARCHVIEW IS CLOSING 

     return true; 
    } 
}); 
+1

Это сработало. Благодаря!! –

+1

Это устарело – iBEK

+0

попробуйте это MenuItem.setOnActionExpandListener (новый MenuItem.OnActionExpandListener() { @ Override public boolean onMenuItemActionExpand (ItemItem item) { return true; } @ Override public boolean onMenuItemActionCollapse (ItemItem item) { return true; } }); https://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html –

2

Просто переоставьте ниже метод.

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case android.R.id.home: 
      //do whatever you want to do here. 

      } 
      return true; 
    } 
+3

I переопределяет его, но он не срабатывает, когда я нажимаю кнопку «Назад» –

+0

. Добавить строку ниже \t \t \t actionBar.setHomeButtonEnabled (true); –

+0

Также добавьте действиеBar.setDisplayHomeAsUpEnabled (true); –

4

Вы должны добавить мета-данные вашей manifest.xml для деятельности которых вы хотите

Как

<activity 
     android:name=".Example" 
     android:label="@string/Example" 
     android:theme="Theme.AppCompat.Light"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 

и ваш код должен быть, как это описано в примере

@Override 
protected void onCreate(Bundle savedInstanceState) { 
....... 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

...... 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+1

см. Прилагаемое изображение. Я хочу обнаружить нажатие кнопки «Назад», когда отображается окно поиска. Я думаю, что код, который вы прикрепляли, работает при открытии новой активности, а не при открытии окна поиска. –

0

Попробуйте это: вместо того, чтобы использовать onOptionsItemSelected для обнаружения изменения поиска, используйте OnQueryTextListener. Затем onQueryTextChanged вызывается с помощью кнопки «Назад» (и в любой другой момент времени текст запроса изменяется).

Когда вы настраиваете свое меню, назначьте searchView слушателю. OnQueryTextChange будет вызываться при каждом изменении критериев поиска (при нажатии любой клавиши, кроме кнопки поиска), и при нажатии кнопки «Назад» вызывается с пустой строкой. OnQueryTextSubmit вызывается при нажатии кнопки поиска на клавиатуре.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 

    final SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      Log.i(TAG,"onQueryTextSubmit: " + s); 
      searchView.clearFocus(); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      Log.i(TAG,"onQueryTextChange: " + s); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      Fragment fragment = fragmentManager.findFragmentByTag(currentFragmentTag); 
      if (fragment.getClass().getName().startsWith("com.mydomain.myapp.mainactivity.MyFragment")) { 
       if (s.isEmpty()) { 
        ((SingleICPListFragment)fragment).clearSearchCriteria(); 
       } else { 
        ((SingleICPListFragment) fragment).applySearchCriteria(s); 
       } 
      } 
      return true; 
     } 
    }); 

    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^