Reputation: 187
I am having a MainActivity
with three tabs using ViewPager
and PagerSlidingTabStrip library in my android app.
The problem is how can i change the menu of MainActivity
when the fragment changed(i.e. Tab changed).
Each Tab has different menu. How can i do this?
Upvotes: 0
Views: 79
Reputation: 5598
You should override onCreateOptionsMenu in each fragment used in ViewPager and use menu.clear() before inflating menu resource.
You can check how to use this in this link
Attempt on "Changing menu items at runtime" chapter.
Upvotes: 2
Reputation: 361
In my case I am using 2 fragments...you're just going to add one
fragment
...
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.login, container, false);
...
It connects to layout login
fragment is basically the same except the layout
... public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.register, container, false);
...
It connects to layout register
Then we have TabsPagerAdapter
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// 1 fragment activity
return new LoginFragment();
case 1:
// 2 fragment activity
return new RegisterFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 2;
}
}
And all that you call here, in MainActivity
public class MainActivity extends FragmentActivity implements ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener,ActionBar.TabListener {
private ViewPager mViewPager;
private TabsPagerAdapter mAdapter;
private TabHost mTabHost;
private String[] tabs = { "1.Fragment", "2.Fragment"};
private TabHost.TabContentFactory mTabFactory = new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
View v = new View(MainActivity.this);
v.setMinimumHeight(0);
v.setMinimumWidth(0);
return v;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_bottomtabs);
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mViewPager.setOnPageChangeListener(this);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mAdapter);
mTabHost = (TabHost) findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabHost.setOnTabChangedListener(this);
for (String tab_name : tabs){
TabHost.TabSpec spec =mTabHost.newTabSpec(tab_name);
spec.setIndicator(tab_name);
spec.setContent(mTabFactory);
mTabHost.addTab(spec);
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mTabHost.setCurrentTab(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onTabChanged(String tabId) {
int position = -1;
if (tabId.contains("1.Fragment")) {
position = 0;
} else if (tabId.contains("2.Fragment")) {
position = 1;
}
mViewPager.setCurrentItem(position);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
I hope this helped
Upvotes: 0