package com.jdroid.android.activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.CallSuper; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.MenuItem; import com.jdroid.android.R; import com.jdroid.android.fragment.FragmentIf; public abstract class FragmentContainerActivity extends AbstractFragmentActivity { @Override public int getContentView() { return isNavDrawerEnabled() ? R.layout.jdroid_nav_fragment_container_activity : R.layout.jdroid_fragment_container_activity; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null && !isFinishing()) { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); Fragment fragment = createNewFragment(); fragmentTransaction.add(getFragmentContainerId(), fragment, fragment.getClass().getSimpleName()); if (addToBackStack()) { fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName()); } fragmentTransaction.commit(); } } public int getFragmentContainerId() { return R.id.fragmentContainer; } public void commitFragment(Fragment fragment) { commitFragment(getFragmentContainerId(), fragment); } protected Boolean addToBackStack() { return false; } protected Fragment createNewFragment() { return instanceFragment(getFragmentClass(), getFragmentExtras()); } protected Bundle getFragmentExtras() { Bundle bundle = getIntent().getExtras(); return bundle != null ? bundle : new Bundle(); } protected Class<? extends Fragment> getFragmentClass() { return null; } public Fragment getFragment() { return getSupportFragmentManager().findFragmentById(getFragmentContainerId()); } public FragmentIf getFragmentIf() { Fragment fragment = getFragment(); if (fragment != null && fragment instanceof FragmentIf) { return (FragmentIf)fragment; } return null; } @Override public Integer getMenuResourceId() { Integer menuResourceId = super.getMenuResourceId(); if (menuResourceId == null) { Fragment fragment = getFragment(); if (fragment != null && fragment instanceof FragmentIf) { return ((FragmentIf)fragment).getMenuResourceId(); } } return menuResourceId; } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item) || getFragment().onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Fragment fragment = getFragment(); if (fragment != null) { fragment.onActivityResult(requestCode, resultCode, data); } } @CallSuper @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); FragmentIf fragment = getFragmentIf(); if (fragment != null) { fragment.onNewIntent(intent); } } @Override public Boolean onBackPressedHandled() { Boolean handled = super.onBackPressedHandled(); if (!handled) { FragmentIf fragment = getFragmentIf(); if (fragment != null) { handled = fragment.onBackPressedHandled(); } } return handled; } }