I have a fragment with ActionBar.TabListener. Inside the TabListener I call to show a fragment if the fragment has already been created. This works on portrait for all fragments, and on landscape for all fragments except one that contains a pagerViewer. For this problematic fragment, when the phone rotates (and re-select the tab), nothing displays.
Here's how I'm creating the fragments (condensed):
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;
import android.support.v4.app.FragmentActivity;
public class MainFragmentActivity extends FragmentActivity implements ResultsListener
{
FragmentManager fragment_manager;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_fragment);
bundle = savedInstanceState;
System.out.println("bundle = " + bundle);
fragment_manager = getFragmentManager();
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setTitle(getApplicationContext().getApplicationInfo().labelRes);
ActionBar.Tab tab_jobList = actionBar.newTab().setText(R.string.stringJobs);
tab_jobList.setIcon(R.drawable.text_list_white);
actionBar.addTab(tab_jobList.setTabListener(new MyTabsListener<JobListLV>(this, "jobList", JobListLV.class, getFragmentManager())));
actionBar.addTab(tab_trends.setTabListener(new MyTabsListener<TrendsPagerHolder>(this, "trendsPagerHolder", TrendsPagerHolder.class, getFragmentManager())));
}
Here's the inner class that has the TabListener:
public MyTabsListener(Activity activity, String tag, Class<T> clz, Bundle args, FragmentManager fragmentManager)
{
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
fm = fragmentManager;
// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
Log.e("mFragment constructor", "mFragment = " + mFragment);
fragmentTrendsPagerHolder = (TrendsPagerHolder) mActivity.getFragmentManager().findFragmentByTag("trendsPagerHolder");
if (mFragment != null && !mFragment.isDetached())
{
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
if (fragmentTrendsPagerHolder != mFragment)
{
ft.hide(mFragment);
ft.commit();
}
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
displayTab(tab, ft);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
if (mFragment != null)
{
ft.hide(mFragment);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
displayTab(tab, ft);
}
private void displayTab(Tab tab, FragmentTransaction ft)
{
fragmentJobListDetails = mActivity.getFragmentManager().findFragmentByTag("jobDetails");
if (fragmentJobListDetails != null && !fragmentJobListDetails.isDetached())
{
ft.hide(fragmentJobListDetails);
}
if (mFragment == null || !mFragment.isAdded())
{
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
}
else
{
System.out.println("mFragment.isAdded() = " + mFragment.isAdded());
Log.e("mFragment", "mFragment = " + mFragment);
ft.show(mFragment);
}
}
}// end MyTabsListener
Any suggestions to solve this issue? Thanks.