2013-12-05 3 views
3

У меня есть основное действие, в котором я назначаю вкладки, используя три фрагмента. У меня есть кнопка на ActionBar, которая перемещается в другой фрагмент, говоря «Информация о приложении». После того, как пользователь перейдет к этому фрагменту (Info), я отключу его, чтобы он не вызывался снова и снова. Затем на задней клавише основного действия я снова включу его. Все идет нормально. Но я не могу повторно включить его для одного сценария: скажите, если пользователь переходит к фрагменту информации и не отжимает, но если он перейдет на другую вкладку, информационная кнопка по-прежнему отключена, так как back-press не были вызваны. Я пробовал много вещей в onStart() и onResume() фрагментов, но я не могу ссылаться на menuItem в любом из них, поскольку получаю нулевой указатель.Включить кнопку ActionBar каждый раз, когда происходит переход по вкладкам.

Код ссылки: (MainActivity при вызове информации фрагмент из onOptionsSelected):

public boolean onOptionsItemSelected(MenuItem item) { 

     mMenuItem = item; 
     switch (item.getItemId()) { 
     case R.id.info: 
      Tab d = getActionBar().getSelectedTab(); 

      System.out.println(""+d.getText().toString()); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager 
        .beginTransaction(); 

      String a = d.getText().toString(); 
      if(a.equalsIgnoreCase("Reminders")){ 
       FragmentContact fragmentcontact = new FragmentContact(); 
       fragmentTransaction.replace(R.id.realtabcontent, fragmentcontact); 
       mMenuItem.setEnabled(false); 
       //mMenuItem.setIcon(R.drawable.btn_age_01); 
      } 
      else if(a.equalsIgnoreCase("Notifications")){ 
       FragmentContact fragmentcontact = new FragmentContact(); 
       fragmentTransaction.replace(R.id.realtabcontent2, fragmentcontact); 
       mMenuItem.setEnabled(false); 

      } 
      else if(a.equalsIgnoreCase("Contacts")){ 
       FragmentContact fragmentcontact = new FragmentContact(); 
       fragmentTransaction.replace(R.id.realtabcontent3, fragmentcontact); 
       mMenuItem.setEnabled(false); 

      } 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 



      break; 

на кнопку Назад (Основной вид деятельности):

@Override 
    public void onBackPressed() { 
     mMenuItem.setEnabled(true); 
     super.onBackPressed(); 
    } 
+0

Являются ли напоминания, уведомления и контакты фрагментами под кнопкой «Действие»? т. е. они являются частью кнопки «Информация». –

+0

Информация - это всеохватывающий фрагмент, он доступен для навигации из любого из трех, эта навигация не открывает другого намерения, однако он просто перемещается с любой из трех вкладок фрагментов в один и тот же вид. То есть он отображается без висящей вкладки. – Skynet

+0

Если да, почему бы не попытаться установить 'default: mMenuItem.setEnabled (true);' inside 'switchc-case'. –

ответ

2

Решение было очень простым, чтобы установить параметры меню для отдельных «фрагментов»:

setHasOptionsMenu(true); 

Cheers !!

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