Figured I might as well talk about the solution I came up with in-case
someone comes to this thread with the same ideas I was

Eventually went with a workaround of having a base layout with 3 frame
layouts...

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

        <FrameLayout
                android:id="@+id/fragment_sb"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>
        <FrameLayout
                android:id="@+id/fragment_local"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>
        <FrameLayout
                android:id="@+id/fragment_rest"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>

    </LinearLayout>

Then in my activity with the tabs I made a custom TabListener that
handled the changes between.  The code I used is below (I'm using
actionbarsherlock so it'll look slightly different than the normal
stuff)

    public class TabActivity extends FragmentActivity {

        Fragment1 fragment1;
        Fragment2 fragment2;
        Fragment3 fragment3;
        Fragment4 fragment4;

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

            final ActionBar bar = getSupportActionBar();
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            bar.setDisplayShowTitleEnabled(true);
            bar.setDisplayShowHomeEnabled(false);
            bar.setTitle("Title");

            bar.addTab(bar.newTab()
                    .setIcon(R.drawable.ic_list_tab_selected)
                    .setTabListener(new ListTabListener(this)));
            bar.addTab(bar.newTab()
                    .setIcon(R.drawable.ic_map_tab_selected)
                    .setTabListener(new MapTabListener(this)));

            if (savedInstanceState != null) {
 
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }
        }

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt("tab",
getSupportActionBar().getSelectedNavigationIndex());
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.test_menu, menu);

                return super.onCreateOptionsMenu(menu);
        }

        public static class ListTabListener implements
ActionBar.TabListener {
                private static final String fragment1Tag = "fragment1_tag";
                private static final String fragment2Tag = "fragment2_tag";
                private static final String fragment3Tag = "fragment3_tag";

                private FragmentActivity activity;
                private Fragment1 fragment1;
                private Fragment2 fragment2;
                private Fragment3 fragment3;

                public ListTabListener(FragmentActivity activity) {
                        this.activity = activity;

                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();
                fragment1 = (Fragment1)
activity.getSupportFragmentManager().findFragmentByTag(fragment1Tag);
                if (fragment1 != null && !fragment1.isDetached()) {
                    ft.detach(fragment1);
                }

                fragment2 = (Fragment2)
activity.getSupportFragmentManager().findFragmentByTag(fragment1Tag);
                if (fragment2 != null && !fragment2.isDetached()) {
                    ft.detach(fragment2);
                }

                fragment3 = (Fragment3)
activity.getSupportFragmentManager().findFragmentByTag(fragment1Tag);
                if (fragment3 != null && !fragment3.isDetached()) {
                    ft.detach(fragment3);
                }

                        ft.commit();
                }

                @Override
                public void onTabReselected(Tab tab, FragmentTransaction nullFt)
{
                        //Reselected don't do anything
                }

                @Override
                public void onTabSelected(Tab tab, FragmentTransaction nullFt) {
                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();

                        if(fragment1 == null) {
                                fragment1 = new Fragment1();
                                ft.add(R.id.fragment_sb, fragment1, 
fragment1Tag);
                        } else {
                                ft.attach(fragment1);
                        }

                        if(fragment2 == null) {
                                fragment2 = new Fragment2();
                                ft.add(R.id.fragment_local, fragment2, 
fragment2Tag);
                        } else {
                                ft.attach(fragment2);
                        }

                        if(fragment3 == null) {
                                fragment3 = new Fragment3();
                                ft.add(R.id.fragment_rest, fragment3, 
fragment3Tag);
                        } else {
                                ft.attach(fragment3);
                        }

                        ft.commit();
                }

                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction nullFt)
{
                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();

                        if(fragment1 != null)
                                ft.detach(fragment1);
                        if(fragment2 != null)
                                ft.detach(fragment2);
                        if(fragment3 != null)
                                ft.detach(fragment3);

                        ft.commit();
                }
        }

        public static class MapTabListener implements
ActionBar.TabListener {
                private static final String fragment4Tag = "fragment4_tag";

                private FragmentActivity activity;
                private Fragment4 fragment4;

                public MapTabListener(FragmentActivity activity) {
                        this.activity = activity;

                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();
                fragment4 = (Fragment4)
activity.getSupportFragmentManager().findFragmentByTag(fragment4Tag);
                if (fragment4 != null && !fragment4.isDetached()) {
                    ft.detach(fragment4);
                }
                ft.commit();
                }

                @Override
                public void onTabReselected(Tab tab, FragmentTransaction nullFt)
{
                        //Reselected don't do anything
                }

                @Override
                public void onTabSelected(Tab tab, FragmentTransaction nullFt) {
                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();

                        if(fragment4 == null) {
                                fragment4 = new Fragment4();
                                ft.add(R.id.fragment_rest, fragment4, 
fragment4Tag);
                        } else {
                                ft.attach(fragment4);
                        }

                        ft.commit();
                }

                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction nullFt)
{
                        FragmentTransaction ft =
activity.getSupportFragmentManager().beginTransaction();

                        if(fragment4 != null)
                                ft.detach(fragment4);

                        ft.commit();
                }
        }
    }

If anyone sees any flaws or has a suggestion for improvement please
point it out

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to