Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I'll leave this open incase someone has a simplification or a better idea...</p> <p>Eventually went with a workaround of having a base layout with 3 frame layouts...</p> <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" &gt; &lt;FrameLayout android:id="@+id/fragment_sb" android:layout_width="fill_parent" android:layout_height="wrap_content"/&gt; &lt;FrameLayout android:id="@+id/fragment_local" android:layout_width="fill_parent" android:layout_height="wrap_content"/&gt; &lt;FrameLayout android:id="@+id/fragment_rest" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"/&gt; &lt;/LinearLayout&gt; </code></pre> <p>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)</p> <pre><code>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 &amp;&amp; !fragment1.isDetached()) { ft.detach(fragment1); } fragment2 = (Fragment2) activity.getSupportFragmentManager().findFragmentByTag(fragment1Tag); if (fragment2 != null &amp;&amp; !fragment2.isDetached()) { ft.detach(fragment2); } fragment3 = (Fragment3) activity.getSupportFragmentManager().findFragmentByTag(fragment1Tag); if (fragment3 != null &amp;&amp; !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 &amp;&amp; !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(); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload