I'm trying to set different MenuItems
to each of my app's tabs (ActionBar Navigation Tabs). I've tried many solutions but the last seems to be the closest. When i open my app it hides my MenuItem
, but when i swipe to second Fragment it doesn't show the MenuItem
in spite of the fact that ive set that it has to be visible.
Do you have any idea, how to solve this?
See my code below (please check mainly the statements near notes "Here"):
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);
}
}
Thanks in advance!
If there is no more item visible, setVisible(true) will be not working.
One option is to null the icon, set empty title and disable this item. Or maybe clearing and inflating menu in onPrepareOptionsMenu again will be working well.