0

My app currently consist of 3 fragments, 2 of them are displayed as tabs on actionbarsherlock libary. Whenever I try to replace my first fragment, with my 3rd fragment, the new view is blank.

How do I display the 3rd? And do I need to return a new instantiated fragment when calling method getItem()?

Heres a illustration of my app layout

public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener  {
ViewPager mViewPager;
myPageAdapter mPageAdapter;
List<Fragment> fragments;
ActionBar actionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    fragments = new Vector<Fragment>();
    fragments.add(LoginFragment.newInstance());
    fragments.add(EventFragment.newInstance());

    mPageAdapter = new myPageAdapter(getSupportFragmentManager(), fragments, this);

    actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setLogo(R.drawable.logo);
    actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mPageAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
            invalidateOptionsMenu();
        }
    });

    for (int i = 0; i < mPageAdapter.getCount(); i++) {
    actionBar.addTab(actionBar.newTab().setText(mPageAdapter.getPageTitle(i)).setTabListener(this));
    }

}


@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.itemRefresh).setVisible(mViewPager.getCurrentItem() == 1);
    menu.findItem(R.id.itemArchive).setVisible(mViewPager.getCurrentItem() == 0);
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.layout.menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.itemRefresh:
        Toast.makeText(this, "updating page", Toast.LENGTH_SHORT).show();
        return true;
    case R.id.itemArchive:
        displayArchive();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

public void displayArchive() {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.pager, ArchiveFragment.newInstance());
    ft.addToBackStack(null);
    ft.commit();
}

Pageadapter

public class myPageAdapter extends FragmentPagerAdapter {
private Context context;
private List<Fragment> fragments;

public myPageAdapter(FragmentManager fm, List<Fragment> fragments, Context context) {
    super(fm);
    this.context = context;
    this.fragments = fragments;
}

@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}

@Override
public int getCount() {
    return fragments.size();
}

@Override
public String getPageTitle(int position) {
    switch (position) {
    case 0:
        return context.getString(R.string.title_fragment1);
    case 1:
        return context.getString(R.string.title_fragment2);
    default:
        return null;
    }
}

}

main activity xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>

Thanks in advance.

leu2tm
  • 11
  • 4
  • http://stackoverflow.com/questions/18679596/unexpected-namespace-prefix-xmlns-found-for-tag-fragment/18679643#18679643. check this there is sample if it helps – Raghunandan Sep 10 '13 at 14:22
  • Thanks, but its not what im searching for. I can already dispaly my fragments that has a tab. So what I need is to be able to display a 3rd fragment, which isn't in the tab bar. – leu2tm Sep 11 '13 at 07:33
  • fragment is hosted by a activity. so i guess you need a activity that hosts the third fragment – Raghunandan Sep 11 '13 at 07:35
  • I know that, I already have a SherlockFragmentActivity, which behaves like an activity. Why would I need another activity to host the 3rd fragment? – leu2tm Sep 11 '13 at 08:26

1 Answers1

0

I figured out that instead of storing them in an arraylist, i instantiated them when they are about to be retrieved.

And when I wanted to switch between 2 fragments, I handled it by removing, and then returning a specific fragment, whereafter i notified data set changed.

leu2tm
  • 11
  • 4