2013-04-18 2 views
1

У меня проблемы с onOptionsItemSelected() в SherlockFragmentActivity. Вызывается функция onCreateOptionsMenu(), и меню параметров построено отлично, но когда я нажимаю на элемент «Параметры», onOptionsItemSelected() не вызывается.Android: onOptionsItemSelected() вызван в SherlockActivity, но не в SherlockFragmentActivity

Я попробовал один и тот же следующий код в тестовом проекте с использованием SherlockActivity и там работает:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

    menu.add(0, 1, 0, "hi").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
    menu.add(0, 1, 0, "ha").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER | MenuItem.SHOW_AS_ACTION_NEVER); 

    return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == 1) { 
      // Do someting! 

     } 
     return true; 
    } 

В обоих случаях следующие импорта выполняются:

import com.actionbarsherlock.app.ActionBar; 
    import com.actionbarsherlock.view.Menu; 
    import com.actionbarsherlock.view.MenuItem; 

Кто-нибудь знает помощь? Спасибо!

+0

Вы пытались использовать «SherlockFragmentActivity» в своем минимальном тестовом проекте? Я использовал 'onOptionsItemSelected()' в действиях, которые наследовали от «SherlockFragmentActivity» во многих случаях и никогда не возникали проблемы. –

+0

Спасибо за вашу помощь, я попробовал сейчас, и он работает с SherlockFragmentActivity, но все же только в минимальном тестовом проекте. У вас есть идея, что может повлиять на это в моем большом проекте? Выполняют ли фрагменты роль (у них нет меню опций)? – user1956123

+0

Извините, не знаю. Если бы я работал над этой проблемой, я бы либо медленно срывал свою сломанную деятельность, либо медленно наращивал свою рабочую активность, пока не нашел точку, где она ломается. Тогда вы можете выяснить, как решить. –

ответ

1

Я думаю, что это происходит потому, что вы не устанавливаете MenuItemClickListener (вы создаете элементы в коде). Но если вы define menu from xml Android установит прослушиватель и запустит onOptionsItemSelected при нажатии.

+0

Спасибо за ваш ответ! Я попытался определить его из XML сейчас, но он все еще не работает. – user1956123

1

Спасибо! Теперь я скопировал проект и перестроил свой SherlockFragmentActivity и нашел проблему. Мой класс уже содержал общедоступный логический onMenuItemSelected (int featureId, элемент MenuItem), и это будет вызываться вместо onOptionsItemSelected. Мне нужно это из-за кнопки «Назад» в верхнем левом месте панели действий.

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