-1

Я пытаюсь установить разные MenuItems на каждое из вкладок моего приложения (вкладки навигации ActionBar). Я пробовал много решений, но последнее кажется самым близким. Когда я открываю свое приложение, он скрывает мой MenuItem, но когда я прокручиваю второй фрагмент, он не показывает MenuItem, несмотря на то, что ive установил, что он должен быть видимым.Настройка видимости проблемы с MenuItems

У вас есть идея, как это решить?

Смотрите мой код ниже (пожалуйста, проверьте в основном заявления возле нот «Здесь»):

public class MainActivity extends ActionBarActivity{ 
    ProgressBar mProgressBar; 
    EditText mEditText; 
    RelativeLayout mRelativeLayout; 
    ProgressBar oProgressBar; 
    LinearLayout mLinearLayout; 
    ViewPager mPager; 
    ActionBar mActionBar; 
    Menu mMenu; 
    Tab mTab; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Parse.initialize(this, "code", "code"); 

     ParseObject.registerSubclass(Animal.class); 
     ParseAnalytics.trackAppOpened(getIntent()); 
     Log.v("Initialize", "intitalizing from Parse.com app"); 

     mActionBar = getSupportActionBar(); 
     mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mPager = (ViewPager) findViewById(R.id.pager); 

     ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 
       super.onPageSelected(position); 

       mActionBar.setSelectedNavigationItem(position); 
      } 
     }; 

     FragmentManager fm = getSupportFragmentManager(); 
     mPager.setOnPageChangeListener(ViewPagerListener); 

     ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm); 

     mPager.setAdapter(viewpageradapter); 



     ActionBar.TabListener tabListener = new ActionBar.TabListener() { 


      @Override 
      public void onTabReselected(Tab mTab, FragmentTransaction arg1) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTabSelected(Tab mTab, FragmentTransaction arg1) { 
       mPager.setCurrentItem(mTab.getPosition()); 
       mPager.setOffscreenPageLimit(3); 
       supportInvalidateOptionsMenu(); //Here 


      } 

      @Override 
      public void onTabUnselected(Tab mTab, FragmentTransaction arg1) { 
       // TODO Auto-generated method stub 
       supportInvalidateOptionsMenu(); 
      } 
     }; 



     ActionBar.Tab Animals = mActionBar.newTab().setText("Animals"); 
     ActionBar.Tab Frag2Tab = mActionBar.newTab().setText("Favorites"); 
     ActionBar.Tab Frag3Tab = mActionBar.newTab().setText("Settings"); 


     Animals.setTabListener(tabListener); 
     Frag2Tab.setTabListener(tabListener); 
     Frag3Tab.setTabListener(tabListener); 


     mActionBar.addTab(Animals); 
     mActionBar.addTab(Frag2Tab); 
     mActionBar.addTab(Frag3Tab); 

    } 



    @Override 
    public void onDestroy(){ 
     System.exit(0); 
    } 


    @Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    super.onPrepareOptionsMenu(menu); 
     Fragment1 frg1 = new Fragment1(); 
     Fragment2 frg2 = new Fragment2(); 
     Fragment3 frg3 = new Fragment3(); 


     try { 
      if(frg1.isMenuVisible()){ 


        menu.findItem(R.id.action_refresh).setEnabled(false) .setTitle("").setIcon(null); 
        Log.v("fdsfad", "sadfasdfsa"); 

          } 
      else if (frg2.isMenuVisible()){ 


        menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh); 
        Log.v("fdsfad", "sadfasdfsa"); 

          } 

      else if (frg3.isMenuVisible()){ 


       menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh); 
        Log.v("fdsfad", "sadfasdfsa"); 

          } 

    } catch (Exception e) { 
        e.printStackTrace(); 
              } 


     return true; 

} 
    @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 


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

      return true; 
     } 




     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.action_refresh: 
        Toast.makeText(getBaseContext(), "Pull to refresh", Toast.LENGTH_SHORT).show(); 

        return true; 
       } 
      return super.onOptionsItemSelected(item); 
     } 



     @Override 
      public boolean onKeyDown (int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_SEARCH) { 
        Toast.makeText(this, "Search button: clicked", Toast.LENGTH_SHORT).show(); 
       } 

       return super.onKeyDown(keyCode, event); 
      } 




     } 

Спасибо заранее!

ответ

2

Если на дисплее больше не отображается пункт, setVisible (true) не будет работать.

Один из вариантов - обнулить значок, установить пустой заголовок и отключить этот элемент. Или, возможно, очистка и раздувание меню в onPrepareOptionsMenu снова будет работать хорошо.

+0

Thans for a reply. Ive попробовал первое решение, но оно не работает. Как мне его раздуть? – marson

+0

Для первого решения: Вместо строки 'menu.findItem (R.id.action_refresh) .setVisible (false)' make 'menuItem.setEnable (false)', 'menuItem.setTitle (" ")', 'menuItem. SetIcon (нуль) '. и если вы хотите показать элемент, сделайте противоположное так, чтобы setEnable true, setIcon с изображением и setTitle с вашим значением названия. –

+0

Ive попробовал, и он все тот же – marson