1

Hi I have debugged my code and got to know that getItem() function in actionbarActivity is calling twice when i switch tabs.

Lets say i have three tabs(each tab consists of a fragment) and i am moving from first to second tab, getItem() method calls for second and third tab. Fragment content showing correctly but titles and menu showing for third tab.

Can any one please help me on this.I have searched a lot in Google but did not get the solution.

Thanks in advance.

here is my code :

public class ActionBarTabActivity extends ActionBarActivity implements ActionBar.TabListener {

private String token = "";
private String loggedInEmail = "";
private String userId = "";

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

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

    Intent intent = getIntent();
    loggedInEmail = intent.getStringExtra(Constants.LOGGED_IN_MAIL);
    token = intent.getStringExtra(Constants.TOKEN);
    userId = intent.getStringExtra(Constants.USER_ID);
    Log.d("session ", token);

    // Set up the action bar.
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    actionBar.setBackgroundDrawable(getResources().getDrawable(R.color.light_orange));
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);


    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);
                }
            });

    actionBar.addTab(actionBar.newTab()
            .setText(mSectionsPagerAdapter.getPageTitle(0)).setIcon(getResources().getDrawable(R.drawable.adduser))
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab()
            .setText(mSectionsPagerAdapter.getPageTitle(1)).setIcon(getResources().getDrawable(R.drawable.dashboard))
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab()
            .setText(mSectionsPagerAdapter.getPageTitle(2)).setIcon(getResources().getDrawable(R.drawable.report))
            .setTabListener(this));
}


@Override
public void onTabSelected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, switch to the corresponding page in
    // the ViewPager.
    mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
}

@Override
public void onTabReselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class
        // below).
        //return PlaceholderFragment.newInstance(position + 1);
        Bundle args = new Bundle();
        args.putString(Constants.TOKEN, token);
        args.putString(Constants.LOGGED_IN_MAIL, loggedInEmail);
        args.putString(Constants.USER_ID, userId);
        Fragment fr = null;
        switch (position) {
        case 0:
            fr = new Fragment1();
            fr.setArguments(args);
            break;
        case 1:
            fr = new Fragment2();
            break;
        case 2:
            fr = new Fragment3();
            fr.setArguments(args);
            break;
        default:
            fr = new BlankFragment();
            break;
        }

        return fr;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        case 2:
            return getString(R.string.title_section3).toUpperCase(l);
        }
        return null;
    }
}

}

Pallav Singh
  • 103
  • 3
  • 10
  • Hi @Rod_Algonquin : i have edited my question. please find my code.. if u want fragment code also i can paste it here.. please suggest.. Thanks – Pallav Singh Jun 22 '14 at 13:18

0 Answers0