2012-03-18 5 views
5

Я использую sherlockfragmentactivity, у которого есть ViewPager, два фрагмента и ActionBar, отображающий две вкладки. Я заселить действия, элементы из фрагмента, но я должен вызвать методActionItem потерян на экране вращения

setHasOptionsMenu(true); 

в порядке, чем дисплей фрагмента в том ActionBar MenuItem. Но когда меняется ориентация экрана, элементы MenuItems не отображаются.

Вот мой код, чтобы создать меню опции в моем первом фрагменте:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    menu.add(R.string.action_refresh).setIcon(R.drawable.ic_menu_refresh) 
      .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 

       public boolean onMenuItemClick(MenuItem item) { 
        refresh(); 
        return false; 
       } 
      }).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    menu.add(R.string.action_add_a_file).setIcon(R.drawable.ic_menu_upload) 
      .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    menu.add(R.string.action_settings).setIcon(android.R.drawable.ic_menu_preferences) 
      .setIntent(new Intent(getSherlockActivity(), SettingsActivity.class)) 
      .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

} 

Есть ли способ, чтобы правильно добавить элемент на панель действий от SherlockFragment и как я могу сохранить эти элемента в ActionBar после изменение ориентации экрана?

+2

Я не знаю, является ли это лучшим решением, но поскольку у меня есть известное фиксированное количество фрагментов, я создаю их в методе 'onCreate' на моем SherlockActivity и вызываю после инициализации:' invalidateOptionsMenu(); 'Тогда в метод 'onActivityCreated' моих фрагментов, после того, что мне нужно сделать, я называю' setHasOptionsMenu (true); '. Таким образом, мои ActionItems отображаются для каждого фрагмента даже после ориентации экрана. – Kowlown

ответ

0

добавить следующую строку в вашем FragmentActivity в manifeast файле android:configChanges="orientation"

ориентация автоматически обрабатывается самой системой. но я не знаю погоды, это эффективный способ или нет.

+0

+1. Сработало спасибо .. –

+0

Использование 'android: configChanges =" orientation "' [не рекомендуется] (http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html#bad -сохранить-практику-в-активность) – matoni

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