Note that there are some explanatory texts on larger screens.

plurals
  1. POFragmentTabhost no activity illegalstateexception error
    text
    copied!<p>I am using fragmenttabhost for fragments . In one fragment there is are two child fragments . When Changing fragment from child fragment working fine . However when going to some other tab and comming back making error</p> <pre><code>public class MainActivity extends FragmentActivity implements OnTabChangeListener { private FragmentTabHost mTabHost; private HashMap&lt;String, Stack&lt;Fragment&gt;&gt; mStacks; private String mCurrentTab; @Override protected void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.bottom_tabs); mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); mTabHost.setOnTabChangedListener(this); mStacks = new HashMap&lt;String, Stack&lt;Fragment&gt;&gt;(); mStacks.put(AppConstants.DEAL_FRAGMENT, new Stack&lt;Fragment&gt;()); mStacks.put(AppConstants.CONN_FRAGMENT, new Stack&lt;Fragment&gt;()); mStacks.put(AppConstants.PROFILE_FRAGMENT, new Stack&lt;Fragment&gt;()); mStacks.put(AppConstants.MORE_FRAGMENT, new Stack&lt;Fragment&gt;()); initializeTabs(); } private void initializeTabs() { Bundle b = new Bundle(); b.putString("key", AppConstants.DEAL_FRAGMENT); mTabHost.addTab(mTabHost.newTabSpec(AppConstants.DEAL_FRAGMENT) .setIndicator("Deal"), DealFragment.class, b); // b = new Bundle(); b.putString("key", AppConstants.CONN_FRAGMENT); mTabHost.addTab(mTabHost.newTabSpec(AppConstants.CONN_FRAGMENT) .setIndicator("Conn"), ConnFragment.class, b); b = new Bundle(); b.putString("key", AppConstants.PROFILE_FRAGMENT); mTabHost.addTab(mTabHost.newTabSpec(AppConstants.PROFILE_FRAGMENT) .setIndicator("Profile"), ProfileFragment.class, b); b = new Bundle(); b.putString("key", AppConstants.MORE_FRAGMENT); mTabHost.addTab(mTabHost.newTabSpec(AppConstants.MORE_FRAGMENT) .setIndicator("More"), MoreFragment.class, b); } public void pushFragments(String tag, Fragment fragment, boolean shouldAnimate, boolean shouldAdd) { /*if (shouldAdd) mStacks.get(tag).push(fragment);*/ FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); if (shouldAnimate) ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left); ft.replace(R.id.realtabcontent, fragment); ft.commit(); } @Override public void onTabChanged(String tabId) { mCurrentTab = tabId; Log.d("Tabid", "" + mCurrentTab); if (mStacks.get(tabId).size() == 0) { if (tabId.equals(AppConstants.DEAL_FRAGMENT)) { pushFragments(tabId, new DealFragment(), false, true); } else if (tabId.equals(AppConstants.CONN_FRAGMENT)) { pushFragments(tabId, new ConnFragment(), false, true); } else if (tabId.equals(AppConstants.PROFILE_FRAGMENT)) { pushFragments(tabId, new ProfileFragment(), false, true); } else if (tabId.equals(AppConstants.MORE_FRAGMENT)) { pushFragments(tabId, new MoreFragment(), false, true); } } else { pushFragments(tabId, mStacks.get(tabId).lastElement(), false, false); } } public void popFragments() { Fragment fragment = mStacks.get(mCurrentTab).elementAt( mStacks.get(mCurrentTab).size() - 2); mStacks.get(mCurrentTab).pop(); FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); ft.replace(R.id.realtabcontent, fragment); ft.commit(); } @Override public void onBackPressed() { if(((BaseFragment)mStacks.get(mCurrentTab).lastElement()).onBackPressed() == false){ if(mStacks.get(mCurrentTab).size() == 1){ super.onBackPressed(); // or call finish.. }else{ popFragments(); } }else{ } } </code></pre> <p>}</p> <p>public class DealFragment extends BaseFragment implements OnTabChangeListener {</p> <pre><code>private FragmentTabHost mTabHost; private String mCurrentTab; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mTabHost = new FragmentTabHost(getActivity()); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.menu_settings); mTabHost.setOnTabChangedListener(this); initializeChildTabHost(); return mTabHost; } private void initializeChildTabHost() { Bundle b = new Bundle(); b.putString("key", AppConstants.LIST_DEAL_FRAGMENT); mTabHost.addTab( mTabHost.newTabSpec(AppConstants.LIST_DEAL_FRAGMENT) .setIndicator( "List"), CategoryListFragment.class, b); // b = new Bundle(); b.putString("key", AppConstants.CATEGORY_DEAL_FRAGMENT); mTabHost.addTab( mTabHost.newTabSpec(AppConstants.CATEGORY_DEAL_FRAGMENT).setIndicator( "Category"), CategoryFragment.class, b); } @Override public void onTabChanged(String tabId) { mCurrentTab = tabId; Log.d("Current Child Tab", ""+mCurrentTab); } </code></pre> <p>}</p> <p>public class CategoryListFragment extends BaseFragment implements OnClickListener{</p> <pre><code>Button button; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout, container, false); button = (Button)view.findViewById(R.id.addNewFrag); button.setOnClickListener(this); return view; } @Override public void onClick(View v) { if(v==button){ mActivity.pushFragments(AppConstants.LIST_DEAL_FRAGMENT, new InviteFrndFragment(), true, true); } } </code></pre> <p>}</p> <p>public class BaseFragment extends Fragment { public MainActivity mActivity;</p> <pre><code>@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = (MainActivity) this.getActivity(); } public boolean onBackPressed() { return false; } public void onActivityResult(int requestCode, int resultCode, Intent data) { } </code></pre> <p>}</p>
 

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